2. Java內(nèi)存區(qū)域與內(nèi)存溢出異常

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)與堆的最大值一致
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容