亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java虛擬機內(nèi)存溢出及泄漏實例

 更新時間:2018年06月21日 08:31:46   作者:dream_sky  
本篇文章給大家分享了java虛擬機內(nèi)存溢出及泄漏的實例以及相關(guān)知識點分享,有興趣的朋友參考學(xué)習(xí)下。

測試參數(shù)設(shè)置:

1、循環(huán)調(diào)用new A()實現(xiàn)堆溢出,java.lang.OutOfMemoryError: Java heap space,

虛擬機參數(shù):-Xms1M -Xmx1M -XX:+HeapDumpOnOutOfMemoryError,解釋:將-Xmx和-Xms設(shè)置為一樣可以避免堆自動擴展,-XX:+HeapDumpOnOutOfMemoryError可以讓虛擬機在出現(xiàn)內(nèi)存溢出異常時Dump出當(dāng)前的堆內(nèi)存轉(zhuǎn)儲快照

//    while (true){
//      new A().do2();
//    }

2、循環(huán)調(diào)用對象引用的方式實現(xiàn)棧溢出。java.lang.StackOverflowError,

虛擬機參數(shù):-Xss128k,

解釋:設(shè)置虛擬機棧的大小為128kn

在單線程下,無論棧幀太大還是虛擬機棧容量太小,內(nèi)存無法分配的時候都會拋出以上錯誤

void do2(){
  do2();
};

3、循環(huán)調(diào)用String.intern()方法來寫入常量池,常量池溢出。java.lang.OutOfMemoryError: PermGen space

while (true)
   {
     list.add(String.valueOf(i++).intern());
   }

虛擬機參數(shù):-XX:PermSize=10M -XX:MaxPermSize=10M,

解釋:表示JVM初始分配的永久代的容量和最大容量。(永久區(qū)內(nèi)存不足,1.8后都在堆上。方法區(qū)=永久代,PermGen space”,即永久代)

四種引用狀態(tài):(類繼承extends WeakReference<Car>)

1、強引用:Object obj = new Object(),只要強引用還存在,垃圾收集器永遠不會回收掉被引用的對象;

2、軟引用:SoftReference,被軟引用關(guān)聯(lián)的對象會在內(nèi)存不夠時被回收。如果這次回收還沒有足夠的內(nèi)存,才會拋出內(nèi)存溢出異常;SoftReference<byte[]> sr = new SoftReference<byte[]>(bytes);

3、弱引用:WeakReference,被弱引用關(guān)聯(lián)的對象只能生存到下一次垃圾回收之前;

4、虛引用:PhantomReference,虛引用是用于跟蹤對象的回收狀態(tài)。

觸發(fā)GC的時機:

1、當(dāng)年輕代或者老年代滿了,Java虛擬機無法再為新的對象分配內(nèi)存空間了,那么Java虛擬機就會觸發(fā)一次GC去回收掉那些已經(jīng)不會再被使用到的對象

2、System.gc(),Runtime.getRuntime().gc()方法,通常這樣會觸發(fā)一次的Full GC以及至少一次的Minor GC,不一定就立即回收。

3、在當(dāng)前服務(wù)器空閑或堆中老年代等占用率較大時觸發(fā)。

回收無引用對象占據(jù)的空間,而不是對象本身。

但真正垃圾回收機制具體在什么時間點開始發(fā)生動作這同樣是不可預(yù)料的(未開源),這和搶占式的線程在發(fā)生作用時的原理一樣。

分代收集算法:

新生代收集器和老年代收集器。

標(biāo)記-清除算法

標(biāo)記-整理算法

內(nèi)存溢出和內(nèi)存泄露的區(qū)別:

1、內(nèi)存溢出:程序在分配內(nèi)存的時候沒有足夠大的空間了。

2、內(nèi)存泄漏:程序在申請內(nèi)存之后,沒有辦法釋放掉內(nèi)存,它始終占用著內(nèi)存,即被分配的對象可達但無用。內(nèi)存泄露一般都是因為內(nèi)存中有一塊很大的對象,但是無法釋放。 會導(dǎo)致內(nèi)存溢出。

并行與并發(fā):

1、并行:指多條垃圾收集器線程運行;

2、并發(fā):指用戶線程和垃圾收集器線程同時工作。

類加載機制:

1、加載(生成java.lang.class對象)、驗證、準(zhǔn)備、解析、初始化(賦值過程)、使用(Using)和卸載(Unloading)這7個階段

2、其中驗證(字節(jié)流包含的信息是否正確,是否符合jvm)、

準(zhǔn)備(為類變量即靜態(tài)變量賦值,賦0)、

解析(將符號引用替換為直接引用,class文件轉(zhuǎn)內(nèi)存)3個部分統(tǒng)稱為連接(Linking)

3、加載階段:獲取.class文件的二進制流;

將類信息、靜態(tài)變量、字節(jié)碼、常量這些.class文件中的內(nèi)容放入方法區(qū)

在內(nèi)存中生成一個代表這個.class文件的java.lang.Class對象,作為方法區(qū)這個類的各種數(shù)據(jù)的訪問入口。

4、初始化階段做的事就是調(diào)用client>方法給static變量賦予用戶指定的值以及執(zhí)行靜態(tài)代碼塊。

雙親委派模型:(啟動類加載器>擴展類加載器>應(yīng)用程序類加載器>自定義類加載器)

一個類加載器收到了類加載的請求,把這個請求委派給父類加載器去完成,父類完不成,自己才去完成。

先行發(fā)生原則:

Java內(nèi)存中的有序性僅僅依靠synchronized和volatile來約束是不行,依靠程序調(diào)用次序規(guī)則判斷setter和getter順序。

Minor GC : 清理年輕帶內(nèi)存, 無法為一個新的對象分配空間。

Major GC : 是清理老年代,許多 Major GC 是由 Minor GC 觸發(fā)的

Full GC : 是清理整個堆空間—包括年輕代和老年代

相關(guān)文章

  • SpringBoot實戰(zhàn)之處理異常案例詳解

    SpringBoot實戰(zhàn)之處理異常案例詳解

    這篇文章主要介紹了SpringBoot實戰(zhàn)之處理異常案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • JAVA中常見異常類

    JAVA中常見異常類

    本文主要介紹了JAVA中的常見異常類。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • SpringMVC框架REST架構(gòu)體系原理分析

    SpringMVC框架REST架構(gòu)體系原理分析

    REST:Representational State Transfer,資源表現(xiàn)層狀態(tài)轉(zhuǎn)換,是目前&#12112;較主流的&#12032;種互聯(lián)網(wǎng)軟件架構(gòu),它結(jié)構(gòu)清晰、標(biāo)準(zhǔn)規(guī)范、易于理解、便于擴展
    2021-09-09
  • springboot程序啟動慢-未配置hostname的解決

    springboot程序啟動慢-未配置hostname的解決

    這篇文章主要介紹了springboot程序啟動慢-未配置hostname的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring Cloud中配置客戶端示例詳解

    Spring Cloud中配置客戶端示例詳解

    這篇文章主要介紹了Spring Cloud中配置客戶端的相關(guān)知識,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • resty client使用Java客戶端來訪問Api

    resty client使用Java客戶端來訪問Api

    這篇文章主要介紹了resty-client使用Java客戶端來訪問Api的驗證權(quán)限,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • java實現(xiàn)簡單驗證碼生成

    java實現(xiàn)簡單驗證碼生成

    這篇文章主要介紹了java實現(xiàn)簡單驗證碼生成,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • java 獲取request中的請求參數(shù)代碼詳解

    java 獲取request中的請求參數(shù)代碼詳解

    這篇文章主要介紹了java 獲取request中的請求參數(shù)的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • Spring?自定義propertyEditor的示例代碼

    Spring?自定義propertyEditor的示例代碼

    這篇文章主要介紹了Spring?自定義propertyEditor的示例代碼,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • SpringBoot集成Redisson實現(xiàn)延遲隊列的場景分析

    SpringBoot集成Redisson實現(xiàn)延遲隊列的場景分析

    這篇文章主要介紹了SpringBoot集成Redisson實現(xiàn)延遲隊列,本文通過場景分析實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論