1、方法區、堆——>線程共享;虛拟機棧、本地方法棧、程式計數器->線程隔離;
2、棧中的異常:如果線程請求的棧深度大于虛拟機所允許的深度,将抛出StackOverFlowError;
3、會抛出OOM:
如果虛拟機棧可以動态擴充,但是擴充時無法申請到足夠的記憶體,會抛出OOM;
如果在堆中沒有記憶體完成執行個體配置設定,并且堆也無法再擴充時,會抛出OOM;
當方法區無法滿足記憶體配置設定需求時,會抛出OOM;
當常量池無法在申請到記憶體時,會抛出OOM;
當各個記憶體區域大于實體記憶體限制時,進而導緻動态擴充時,抛出OOM;
4、對象在記憶體中可分為三個區域:對象頭、執行個體資料、對齊填充
對象頭包括:hashcode(25bit)、GC分代年齡(4bit)、鎖狀态辨別(2bit)、線程持有的鎖、偏向鎖線程ID、偏向時間戳等
另外一部分是類型指針、即對象指向他的類中繼資料的指針;
5、方法區是如何判斷“無用的類”:
該類所有的執行個體都已經被回收;加載該類的ClassLoader已經被回收;該類對應的java.lang.Class對象沒有在任何地方被應用
6、新生代GC(Minor GC):發生在新生代的垃圾收集做法,非常頻繁,因為大多數java對象都是朝生熄滅,速度較快;
老年代GC(Major GC/Full GC):發生在老年的GC。Major GC速度比Minor GC慢10倍以上。老年代的連續空間小于新生代對象總大小會發生Full GC;
7、類加載的時機:
加載——驗證——準備——解析——初始化——使用——解除安裝