面试必问之JVM
- JVM\JDK\JRE關系
2、JVM運行時數據區(qū)
所有學過的知識是用來推導新的未知的知識的,踏入社會要學會運用自己的知識能力去驗證、求證自己的觀點,這是必須具備的能力,過分依賴別人是危險的;用別人的長處來彌補自己的短處,借力提高。
線程時最小的執(zhí)行單位,是一個執(zhí)行者:
JDK1.6+Hotspot虛擬機:
- 程序計數器:指向當前線程正在執(zhí)行的字節(jié)碼指令的地址(行號),有點類似計算機底層的指令計數器
- 虛擬機棧:棧-》數據結構-》存儲數據-》存儲當前線程運行方法時所需要的數據、指令、返回地址;Java類中的方法是要被調用才能執(zhí)行的,這個調用方式可以是常見的main方法,也可以是其他線程來調用。線程調用執(zhí)行方法時需要從虛擬機棧中加載所需要的數據、指令、返回地址,這些就存儲在虛擬棧中,并且一個方法對應一個棧幀;
- 本地方法棧:比如native方法,system.out.println();system.currentmillions()等
- 方法區(qū):類信息(class文件)、常量(1.7+以后有變化:字符串常量切到堆里去了)、靜態(tài)變量、JIT(1.7以前)-》永久代溢出?
- Heap:注意永久代的顏色和方法區(qū)是一樣的;新生代:Eden:survivor from:survivor to 比例為8:1:1,但是如果大對象分配內存失敗,會通過老年代的擔保機制直接進入老年代;
?
jvm參數設置:xms? ?初始化值? xmx (max)最大值,xmn(new)新生代大小;
垃圾回收:垃圾回收算法是理論,垃圾回收器是實踐具體的垃圾回收算法的;
- 標記清除:產生內存碎片;
- 復制算法:內存按容量劃分為大小相等兩塊,每次只使用其中一塊。一塊內存用完還存活著的對象復制另外一塊,然后再把已使用的內存空間一次清理掉。消除了內存碎片現象,但是卻對內存空間的使用做出了高昂的代價,因為能夠使用的內存縮減到原來的一半;
- 標記整理:在完成標記之后,它不是直接清理可回收對象,而是將存活對象都向一端移動,然后清理掉端邊界以外的內存;
- 分代回收算法:根據對象存活的生命周期將內存劃分為若干個不同的區(qū)域。一般情況下將堆區(qū)劃分為老年代(Tenured Generation)和新生代(Young Generation);大部分垃圾收集器對于新生代都采取復制算法,但是新生代的空間不是1:1劃分的,而是按照8:1:1劃分為Eden、survivor1,survivor2;老年代的特點是每次回收都只回收少量對象,一般使用的是標記-整理算法(壓縮法)
總結
- 上一篇: 代数——近世代数知识点思维导图(附Vis
- 下一篇: 天翼网关-无线光纤猫的设置和有WIFI信