一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java虛擬機內存溢出及泄漏實例

java虛擬機內存溢出及泄漏實例

2021-05-10 11:03dream_sky Java教程

本篇文章給大家分享了java虛擬機內存溢出及泄漏的實例以及相關知識點分享,有興趣的朋友參考學習下。

測試參數設置:

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

虛擬機參數:-xms1m -xmx1m -xx:+heapdumponoutofmemoryerror,解釋:將-xmx和-xms設置為一樣可以避免堆自動擴展,-xx:+heapdumponoutofmemoryerror可以讓虛擬機在出現內存溢出異常時dump出當前的堆內存轉儲快照

?
1
2
3
//    while (true){
//      new a().do2();
//    }

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

虛擬機參數:-xss128k,

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

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

?
1
2
3
void do2(){
  do2();
};

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

?
1
2
3
4
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 : 是清理整個堆空間—包括年輕代和老年代

原文鏈接:https://www.cnblogs.com/shuchen007/p/9205612.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产麻豆传媒在线观看 | 亚洲精品成人a | 免费观看的毛片 | 韩国日本香港毛片免费 | 好湿好紧好大野战 | 日本一区视频 | 丁香六月婷婷激情 | 日韩欧美亚洲每日更新网 | 狠狠色狠狠色综合系列 | 国内永久第一免费福利视频 | 继的朋友无遮漫画免费观看73 | 久久青草免费91线频观看站街 | 美女扒下内裤让男人桶的图片 | 视频在线观看大片 | 先锋影音 av | 日韩成本大片35分钟免费播放 | 亚洲成人一区在线 | 欧美综合在线 | 给我视频免费看 | 羞羞答答免费人成黄页在线观看国产 | 亚洲香蕉伊在人在线观看9 亚洲系列国产系列 | 亚洲男人网 | 国四虎影永久 | 操美女 | 韩国三级在线高速影院 | 91麻豆网址 | 美女靠逼动漫 | 国产经典一区 | 视频一区二区 村上凉子 | 国产 日韩 欧美 综合 | 国产亚洲精品自在线亚洲情侣 | 九九热这里只有精品2 | 欧美成a人片免费看久久 | 草莓视频榴莲视频 | 日本无遮挡亲吻膜下面免费 | 国产精品拍拍拍福利在线观看 | 亚洲国产第一区二区三区 | 91混血大战上海双胞胎 | 日本动漫啪啪动画片mv | 欧美人体高清在线观看ggogo | 日本成人黄色片 |