码迷,mamicode.com
首页 > 其他好文 > 详细

JVM学习--数字存储,内存模型,指令重排

时间:2018-04-28 23:45:02      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:图片   次数   自己   zed   规则   正数   计数   线程   AC   

一、数字在计算机中如何存储

  整数:以补码形式存储。

    补码:正数的补码是自身,负数的补码是取反码加1(取反码时符号位还是1)

  浮点型:以float类型表示

  技术分享图片

        注意一下,这八位指数实际上是(127+次数)的结果,因为要考虑到负数指数的情况,例如如下120.5在计算机中的存储:

    技术分享图片

    而因为科学计数法第一位总是1开头,可以将小数点前面的1省略,所以23bit的尾数部分,可以表示的精度却变成了24bit。那24bit能精确到小数点后几位呢,我们知道9的二进制表示为1001,所以4bit能精确十进制中的1位小数点,24bit就能使float能精确到小数点后6位。那从这里可以看到,如果小数位数过多,是不能被精确存储的,还有另一种情况不能被精确存储,例如小数0.2,在取二进制的过程中,“乘2取整,顺序排列”,那最终也乘不到一个整数,所以也是不能被精确存储的。

二、JVM基本结构--内存模型

  这里不说方法区、堆栈之类的,等总结到gc的时候再好好说。

  技术分享图片

  这里只看这张图能反应出的东西:

    ① 每一个线程都有一个独立工作内存(寄存器)

    ② 工作内存中存放的是主存中变量的值的拷贝

    那我们可以发现,当一个线程修改了一个共享变量并写回主存时,另一个持有此共享变量的线程并不会立刻得知此变化,因为这个线程操作的是自己工作内存里的变量,这就是可见性问题(volatile,synchronized,final)。

    之前写的博客:http://www.cnblogs.com/NoYone/p/8541898.html

三、基本结构--指令重排

  指令重排能帮助程序更快速的运行,这是jvm做的优化,但有些时候程序必须顺序执行,指令重排符合以下规则。

  技术分享图片

JVM学习--数字存储,内存模型,指令重排

标签:图片   次数   自己   zed   规则   正数   计数   线程   AC   

原文地址:https://www.cnblogs.com/NoYone/p/8969818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!