2.2 運(yùn)行時數(shù)據(jù)區(qū)域
區(qū)域 | 線程私有\(zhòng)線程共享 | 是否存在內(nèi)存溢出 | 功能 |
---|---|---|---|
堆 | 共享 | 是 | 存放對象實(shí)例數(shù)據(jù) |
方法區(qū) | 共享 | 是 | 存放對象類型信息 |
虛擬機(jī)棧 | 私有 | 是 | 存放本地變量 |
本地方法棧 | 私有 | 是 | 類似虛擬機(jī)棧,存放本地方法的本地變量 |
程序計(jì)數(shù)器 | 私有 | 否 | 記錄線程執(zhí)行的位置 |
2.3 對象訪問
方式 | 實(shí)現(xiàn)方式描述 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|---|
使用句柄 | Java堆中劃分出一塊作為句柄池,reference中存放的是對象的句柄地址,句柄地址包含了對象實(shí)例數(shù)據(jù)和類型數(shù)據(jù)各自的地址 | reference中存儲的是穩(wěn)定的句柄地址,在對象移動時只會改變句柄中的對象實(shí)例地址,reference本身不需要被修改 | |
直接指針 | reference中直接存放的是是對象實(shí)例的地址,其中包含實(shí)例數(shù)據(jù)和類型地址 | 速度更快,節(jié)省了一次指針定位的開銷 |
2.4 內(nèi)存溢出
1. 堆溢出
參數(shù)
參數(shù) | 功能 |
---|---|
-Xms | 堆最小容量 |
-Xmx | 堆最大容量 |
-XX:+HeapDumpOnOutOfMemoryError | 內(nèi)存溢出時存儲堆轉(zhuǎn)儲文件 |
-XX:+PrintGCDetails | 打印GC詳情 |
2. 棧異常
異常類型
名稱 | 異常原因 |
---|---|
StackOverFlowError | 線程請求的棧深度大于虛擬機(jī)允許的最大棧深度 |
OutOfMemoryError | 虛擬機(jī)在擴(kuò)展棧時無法申請到足夠的內(nèi)存空間 |
參數(shù)
參數(shù) | 功能 |
---|---|
-Xoss | 設(shè)置本地方法棧大小(HotSpot不區(qū)分虛擬機(jī)棧和本地方法棧,因此此參數(shù)不起作用) |
-Xss | 設(shè)置棧大小 |
3. 運(yùn)行時常量池溢出
常量池分配在方法區(qū)中
參數(shù)
參數(shù) | 功能 |
---|---|
-XX:PermSize | 方法區(qū)容量 |
-XX:MaxPermSize | 方法區(qū)最大容量 |
4. 方法區(qū)溢出
方法區(qū)功能
用于存放Class相關(guān)信息,如類名、訪問修飾符、常量池、字段描述、方法描述等。
5. 直接內(nèi)存溢出
參數(shù) | 功能 |
---|---|
-XX:MaxDirectMemorySize | 最大直接內(nèi)存容量,默認(rèn)與堆的最大值一致 |