91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java虛擬機出現內存溢出如何解決

發布時間:2021-06-09 17:10:35 來源:億速云 閱讀:301 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關java虛擬機出現內存溢出如何解決,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

測試參數設置:

1、循環調用new A()實現堆溢出,java.lang.OutOfMemoryError: Java heap space,

虛擬機參數:-Xms1M -Xmx1M -XX:+HeapDumpOnOutOfMemoryError,解釋:將-Xmx和-Xms設置為一樣可以避免堆自動擴展,-XX:+HeapDumpOnOutOfMemoryError可以讓虛擬機在出現內存溢出異常時Dump出當前的堆內存轉儲快照

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

2、循環調用對象引用的方式實現棧溢出。java.lang.StackOverflowError,

虛擬機參數:-Xss128k,

解釋:設置虛擬機棧的大小為128kn

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

void do2(){
  do2();
};

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

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

虛擬機參數:-XX:PermSize=10M -XX:MaxPermSize=10M,

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

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

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

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

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

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

觸發GC的時機:

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

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

3、在當前服務器空閑或堆中老年代等占用率較大時觸發。

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

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

分代收集算法:

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

標記-清除算法

標記-整理算法

內存溢出和內存泄露的區別:

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

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

并行與并發:

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

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

類加載機制:

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

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

準備(為類變量即靜態變量賦值,賦0)、

解析(將符號引用替換為直接引用,class文件轉內存)3個部分統稱為連接(Linking)

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

將類信息、靜態變量、字節碼、常量這些.class文件中的內容放入方法區

在內存中生成一個代表這個.class文件的java.lang.Class對象,作為方法區這個類的各種數據的訪問入口。

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

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

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

先行發生原則:

Java內存中的有序性僅僅依靠synchronized和volatile來約束是不行,依靠程序調用次序規則判斷setter和getter順序。

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

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

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

上述就是小編為大家分享的java虛擬機出現內存溢出如何解決了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广东省| 定远县| 肇庆市| 梓潼县| 平泉县| 黎城县| 左权县| 吐鲁番市| 临桂县| 隆德县| 扶余县| 邹平县| 镇平县| 长治县| 天峨县| 东光县| 南漳县| 渭南市| 同江市| 益阳市| 哈巴河县| 庄河市| 米泉市| 沈阳市| 望奎县| 南投县| 罗山县| 河南省| 镶黄旗| 石狮市| 兴城市| 西乌珠穆沁旗| 五指山市| 庆城县| 衡南县| 金华市| 密山市| 大同市| 陕西省| 三明市| 水富县|