从X86指令深扒JVM的位移操作】的更多相关文章

概述 之所以会写这个,主要是因为最近做的一个项目碰到了一个移位的问题,因为位移操作溢出导致结果不准确,本来可以点到为止,问题也能很快解决,但是不痛不痒的感觉着实让人不爽,于是深扒了下个中细节,直到看到Intel的指令规约才算释然,希望这篇文章能引起大家共鸣. 本文或许看起来会比较枯燥,不过其实认真看挺有意思的,如果实在看不下去,告诉你一个极简路径,先看下下面的Demo,然后直接跳到后面的小结,如果懂了,别忘记顺便点个赞,请叫我雷锋,哈哈. Demo 还是从一个简单的例子说起 大家可以尝试做几个改…
1. 打怪升级,你绕不开JVM JVM,对Java程序员进阶而言,是一个绝对绕不开,也不能绕开的话题. 在你打怪升级.进阶蜕变的路上,势必会遇到项目上线中各种OOM.GC等问题,此时JVM的功底就至关重要了. 这篇文章,我们将从自己写的代码运行角度出发,将JVM“开膛破肚”.看看我们写的代码,在JVM的各区域都干了些啥? 多说一句,对于Java工程师的面试,JVM也是必问的一环,因此无论从面试还是实际工作,你都很有必要夯实自己的JVM功底. 扯得有点远,赶紧拉回来,马上进入正题! 2. JVM…
计算机组成 3 指令系统体系结构 3.3 x86指令简介 x86指令种类繁多,数量庞大.在这一节我们将会学习x86指令的分类,并分析其中最为基础的一部分指令. 通常一个指令系统主要包括这几类指令.运算类指令,比如加.减.乘.除这样的算术运算,以及与.或.非这样的逻辑运算. 还有传送类指令,比如把数据从存储器送到通用寄存器,或者从通用寄存器送到I/O接口等等. 有了这两类指令,计算机就可以从外界获取数据,并在内部完成运算,最后将结果输出到外界. 但是如果你想编制比较复杂的程序,例如像高级语言当中…
计算机组成 3 指令系统体系结构 3.4 复杂的x86指令举例 x86作为复杂指令系统的代表,自然会有不少相当复杂的指令.在这一节我们将会看到其中有代表性的一些例子. 关于复杂的x86指令,我们这里举四个例子.第一个是串操作指令. 串操作指令是将存储器中的数据串进行每次一个元素的操作.所谓一个元素可以是字节或者是字.这个串可以很长,能够达到64K个Byte.x86提供了5种不同的串操作指令,并且还有3种重复前缀,可以与串操作指令配合使用. 这张表就展示了这5种串操作指令和3种重复前缀. 我们来选…
反汇编基本原理与x86指令构造 概要:旨在讲述程序的二进制代码转换到汇编.即反汇编的基本原理.以及 x86 架构的 CPU 的指令构造,有这个基础后就能够自己编写汇编程序了,也能够将二进制代码数据转换成汇编助记指令.当然,把本文当作手冊的阅读指导也是能够的.本文还讲述了 DEBUG 工具的部分功能.32位平台下有一个 DEBUG32 版本号能够配合 DOSBOX 工具执行在 Windos 7 这些 NT 系统上,DEBUG 要使用 MSDOS 5.0 版本号中的.这是一个十分实用的工具,它同一时…
最近学习WP8.1应用开发,想把C语言的SM3国密算法移植到手机app中.由于把C语言的代码转换成C#代码工作量较大,因此只能用winodws运行时组件来实现. SM3国密算法是一种HASH算法,具体详情请自行百度. 结果测试发现手机上SM3算法计算出来的结果和电脑上运行的结果不同!经过我一点点调试发现是位移操作惹的祸,代码中有如下宏定义: #define SHL(x,n) (((x) & 0xFFFFFFFF) << n) #define ROTL(x,n) (SHL((x),n)…
java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. 无符号位移:无符号位移不能保持原有正负性,与有符号位移的主要差异主要体现在右移时, 无论数字是正数还是负数,高位统一补0.(无符号左移低位依然是补0) java编程思想里面有这样一句话:当int型数据位移时,只有数值右端的低5位才有用,long型数值只会用到数值右端的低6位. 这里的数值指的是右操作…
「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! 前言 ClassLoader 可以说是 Java 最为神秘的功能之一了,好像大家都知道怎么回事儿 (双亲委派模型好像都都能说得出来...),又都说不清楚具体是怎么一回事 (为什么需要需要有什么实际用途就很模糊了...). 今天,我们就来深度扒一扒,揭开它神秘的面纱! Part 1. 类加载是做什么的? 首先,我们…
垃圾收集(Garbage Collection,GC),它的任务是解决以下 3 件问题: 哪些内存需要回收? 什么时候回收? 如何回收? 其中第一个问题很好回答,在 Java 中,GC 主要发生在 Java 堆和方法区中,对于后两个问题,我们将在之后的内容中进行讨论,并介绍 HotSpot 的 7 个垃圾收集器. 垃圾收集 (GC) 判断对象的生死 判断对象是否可用的算法 引用计数算法 可达性分析算法(主流) 四种引用类型 宣告对象死亡的两次标记过程 方法区的回收 垃圾收集算法 基础:标记 -…
  相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技术背景你要了解吧 二. 哪些内存需要回收? 2.1 引用计数算法 2.1.1 算法分析 2.1.2 优缺点 2.1.3 是不是很无趣,来段代码压压惊 2.2 可达性分析算法 2.3 Java中的引用你了解多少 2.4 对象死亡(被回收)前的最后一次挣扎 2.5 方法区如何判断是否需要回收 三.常用的…