温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java虚拟机知识点有哪些

发布时间:2021-11-18 10:05:12 来源:亿速云 阅读:145 作者:iii 栏目:编程语言

这篇文章主要讲解了“java虚拟机知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java虚拟机知识点有哪些”吧!

1. java 虚拟机结构

java虚拟机知识点有哪些

2. 整数在java虚拟机中的表示

整数在java虚拟机中以补码的形式保存,

  • 原码:所谓原码,就是符号位加上数字的二进制表示,以int为例,第1位表示符号位(正数或负数),其余31位表示该数字的二进制值。

  • 反码:所谓反码,就是符号位不变,其余位取反。

  • 补码:负数的补码就是反码加1,正数的补码就是原码本身。

在java中,可以使用位运算查看整数中每一位的实际值,代码如下:

// 打印 -10 在虚拟机内的实际表示
public static void main(String[] args) {
    int a = -10;
    for(int i = 0; i < 32; i++) {
        int t = (a & 0x8000_0000 >>> i) >>> (31 - i);
        System.out.print(t);
    }
}

这段程序的基本思想是,进行32次循环,每次循环取出int值中的一位,第3行的 0x8000_0000 是一个首位为1,其余位为0的整数,通过右移i位,定位到要获取的第i位,并将除该位外的其他位统一设置为0,而该位不变,最近将该位移至最右,并进行输出。

使用补码的好处

  • 可以统一数字0的表示。0既是非正数,又是非负数,使用原码表示时符号位难以确定,把0归入正数或者负数得到的原码是不同的。但是使用补码表示时,无论把0归入正数还是负数都会得到相同的结果。

  • 使用补码可以简化整数的加减法计算,将减法计算视为加法计算,实现减法和加法的完全统一,实现正数和负数加法的统一。

3. 浮点数在java虚拟机中的表示

在java虚拟机中,浮点数有floatdouble两种,分别是32位和64位浮点数。浮点数在java虚拟机中表示比整数略显复杂。目前使用最为广泛的是由 IEEE 754 定义的浮点数格式。

IEEE 754的定义中,一个浮点数由3部分组成:符号位、指数位 和 尾数位。以32位float类型为例,符号位占1位,表示正负数,指数位占8位,尾数为点剩余23位。

java虚拟机知识点有哪些

  • 31位为符号位:0表示正数,1表示负数

  • 31~23位:共8位表示指数位,内存存储数据从0~2^8-1=255,由于指数可以是正也可以是负,所以指数位采用移位存储表示数据,8位有符号有可表示数据从-128~127,所以指数位表示的实际指数应该是无符号位数减去127,例如0000 0000表示为0-127=-127,1111 1111表示为255-127=128,1000 0001表示为129-127=2

  • 22~0位:共23位表示尾数位,内存存储数据从0~2^23-1=8388607

在java中,使用Float.floatToRawIntBits()函数可以获得一个单精度浮点数的 IEEE 754 表示,如下:

public static void main(String[] args) {
    float a = -5;
    System.out.println(Integer.toBinaryString(Float.floatToIntBits(a)));
}

感谢各位的阅读,以上就是“java虚拟机知识点有哪些”的内容了,经过本文的学习后,相信大家对java虚拟机知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI