JVM學習--數字存儲,內存模型,指令重排
阿新 • • 發佈:2018-04-29
順序 如何 zed png 小數位 image 每一個 tile 運行 ,那最終也乘不到一個整數,所以也是不能被精確存儲的。
一、數字在計算機中如何存儲
整數:以補碼形式存儲。
補碼:正數的補碼是自身,負數的補碼是取反碼加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學習--數字存儲,內存模型,指令重排