欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請碼778899分享:【JVM進(jìn)階之路】四

柚子快報(bào)邀請碼778899分享:【JVM進(jìn)階之路】四

http://yzkb.51969.com/

接下來,我們來設(shè)置一下程序啟動(dòng)時(shí)的JVM參數(shù)。限制內(nèi)存大小為20M,不允許擴(kuò)展,并通過參數(shù)-XX:+HeapDumpOnOutOf-MemoryError 讓虛擬機(jī)Dump出內(nèi)存堆轉(zhuǎn)儲快照。

在Idea中設(shè)置JVM啟動(dòng)參數(shù)如下圖:

運(yùn)行一下:

Java堆內(nèi)存的OutOfMemoryError異常是實(shí)際應(yīng)用中最常見的內(nèi)存溢出異常情況。出現(xiàn)Java堆內(nèi)存溢出時(shí),異常堆棧信息“java.lang.OutOfMemoryError”會(huì)跟隨進(jìn)一步提示“Java heap space”。 Java堆文件快照文件dump到了java_pid18728.hprof文件。

要解決這個(gè)內(nèi)存區(qū)域的異常,常規(guī)的處理方法是首先通過內(nèi)存映像分析工具(如JProfiler、Eclipse Memory Analyzer等)對Dump出來的堆轉(zhuǎn)儲快照進(jìn)行分析。

看到內(nèi)存占用信息如下:

然后可以查看代碼問題如下:

常見堆JVM相關(guān)參數(shù):

-XX:PrintFlagsInitial: 查看所有參數(shù)的默認(rèn)初始值-XX:PrintFlagsFinal:查看所有的參數(shù)的最終值(可能會(huì)存在修改,不再是初始值)

-Xms: 初始堆空間內(nèi)存(默認(rèn)為物理內(nèi)存的1/64)

-Xmx: 最大堆空間內(nèi)存(默認(rèn)為物理內(nèi)存的1/4)

-Xmn: 設(shè)置新生代大?。ǔ跏贾导白畲笾担?/p>

-XX:NewRatio: 配置新生代與老年代在堆結(jié)構(gòu)的占比

-XX:SurvivorRatio:設(shè)置新生代中Eden和S0/S1空間的比例

-XX:MaxTenuringThreshold:設(shè)置新生代垃圾的最大年齡(默認(rèn)15)

-XX:+PrintGCDetails:輸出詳細(xì)的GC處理日志

打印GC簡要信息:① -XX:+PrintGC ② -verbose:gc

-XX:HandlePromotionFailure:是否設(shè)置空間分配擔(dān)保

1.2、虛擬機(jī)棧和本地方法棧溢出

HotSpot虛擬機(jī)中將虛擬機(jī)棧和本地方法棧合二為一,因此對于HotSpot來說,-Xoss參數(shù)(設(shè)置本地方法棧大?。╇m然存在,但實(shí)際上是沒有任何效果的,棧容量只能由-Xss參數(shù)來設(shè)定。關(guān)于虛擬機(jī)棧和本地方法棧,有兩種異常:

如果線程請求的棧深度大于虛擬機(jī)所允許的最大深度,將拋出StackOverflowError異常。 如果虛擬機(jī)的棧內(nèi)存允許動(dòng)態(tài)擴(kuò)展,當(dāng)擴(kuò)展棧容量無法申請到足夠的內(nèi)存時(shí),將拋出 OutOfMemoryError異常。

1.2.1、StackOverflowError

HotSpot虛擬機(jī)不支持棧的動(dòng)態(tài)擴(kuò)展,在HotSpot虛擬機(jī)中,以下兩種情況都會(huì)導(dǎo)致StackOverflowError。

棧容量過小

如下,使用Xss參數(shù)減少棧內(nèi)存容量

/**

vm參數(shù):-Xss128k

*/

public class JavaVMStackSOF {

private int stackLength = 1;

public void stackLeak() {

stackLength++;

stackLeak();

}

public static void main(String[] args) throws Throwable {

JavaVMStackSOF oom = new JavaVMStackSOF();

try {

oom.stackLeak();

} catch (Throwable e) {

System.out.println(“stack length:” + oom.stackLength);

throw e;

}

}

}

運(yùn)行結(jié)果:

棧幀太大

如下,通過一長串變量,來占用局部變量表空間。

運(yùn)行結(jié)果:

無論是由于棧幀太大還是虛擬機(jī)棧容量太小,當(dāng)新的棧幀內(nèi)存無法分配的時(shí)候, HotSpot虛擬機(jī)拋出的都是StackOverflowError異常。

1.2.2、OutOfMemoryError

雖然不支持動(dòng)態(tài)擴(kuò)展棧,但是通過不斷建立線程的方式,也可以在HotSpot上產(chǎn)生內(nèi)存溢出異常。

需要注意,這樣產(chǎn)生的內(nèi)存溢出異常和??臻g是否足夠并不存在任何直接的關(guān)系,主要取決于操作系統(tǒng)本身的內(nèi)存使用狀態(tài)。因?yàn)椴僮飨到y(tǒng)給每個(gè)進(jìn)程的內(nèi)存時(shí)有限的,線程數(shù)一多,自然會(huì)超過進(jìn)程的容量。

創(chuàng)建線程導(dǎo)致內(nèi)存溢出異常 :

/**

vm參數(shù):-Xss2M

*/

public class JavaVMStackOOM {

private void dontStop() {

while (true) {

}

}

public void stackLeakByThread() {

while (true) {

Thread thread = new Thread(new Runnable() {

public void run() {

dontStop();

}

});

thread.start();

}

}

public static void main(String[] args) throws Throwable {

JavaVMStackOOM oom = new JavaVMStackOOM();

oom.stackLeakByThread();

}

}

以上是一段比較有風(fēng)險(xiǎn)的代碼,可能會(huì)導(dǎo)致系統(tǒng)假死,運(yùn)行結(jié)果如下:

1.3、方法區(qū)和運(yùn)行時(shí)常量池溢出

這里再提一下方法區(qū)和運(yùn)行時(shí)常量池的變遷,JDK1.7以后字符串常量池移動(dòng)到了堆中,JDK1.8在直接內(nèi)存中劃出一塊區(qū)域元空間來實(shí)現(xiàn)方區(qū)域。

String:intern()是一個(gè)本地方法,它的作用是如果字符串常量池中已經(jīng)包含一個(gè)等于此String對象的 字符串,則返回代表池中這個(gè)字符串的String對象的引用;否則,會(huì)將此String對象包含的字符串添加到常量池中,并且返回此String對象的引用。在JDK 6或更早之前的HotSpot虛擬機(jī)中,常量池都是分配在永久代中,永久代本身內(nèi)存不限制可能會(huì)出現(xiàn)錯(cuò)誤:

java.lang.OutOfMemoryError: PermGen space

1.4、本機(jī)直接內(nèi)存溢出

直接內(nèi)存(Direct Memory)的容量大小可通過-XX:MaxDirectMemorySize參數(shù)來指定,如果不去指定,則默認(rèn)與Java堆最大值(由-Xmx指定)一致。

直接通過反射獲取Unsafe實(shí)例,通過反射向操作系統(tǒng)申請分配內(nèi)存:

/**

vm參數(shù):-Xmx20M -XX:MaxDirectMemorySize=10M

*/

public class DirectMemoryOOM {

private static final int _1MB = 1024 * 1024;

自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。

深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報(bào)班學(xué)習(xí),但對于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年Java開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Java開發(fā)知識點(diǎn),真正體系化!

由于文件比較大,這里只是將部分目錄截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會(huì)持續(xù)更新!

如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲取?。。▊渥ava獲?。?/p>

寫在最后

為了這次面試,也收集了很多的面試題!

以下是部分面試題截圖

《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實(shí)戰(zhàn)項(xiàng)目源碼》,點(diǎn)擊傳送門即可獲??! 如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲取?。。▊渥ava獲取)**

寫在最后

為了這次面試,也收集了很多的面試題!

以下是部分面試題截圖

[外鏈圖片轉(zhuǎn)存中…(img-vOq6G8gh-1712252433429)] 《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實(shí)戰(zhàn)項(xiàng)目源碼》,點(diǎn)擊傳送門即可獲?。?/p>

柚子快報(bào)邀請碼778899分享:【JVM進(jìn)階之路】四

http://yzkb.51969.com/

推薦閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19330641.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄