Java垃圾回收jconsole分析
環(huán)境
jdk1.8+Mac+Idea
為了便于觀察我們?cè)O(shè)置了虛擬機(jī)的參數(shù)VM oprions
,-Xms10m -Xmx10m
代碼案例1:
新建了一個(gè)數(shù)組,向里面添加100個(gè)OutOfMemory
package com.rumenz; import java.util.ArrayList; import java.util.List; public class OutOfMemory { public byte []one=new byte[128*1024]; public static void main(String[] args) throws InterruptedException { Thread.sleep(5000); //延時(shí)5秒,方便我們打開(kāi)`jconsole` append(100); } private static void append(int n) throws InterruptedException { List<OutOfMemory> list=new ArrayList<>(); for (int i = 0; i < n; i++) { Thread.sleep(3000); //拖慢添加速度,方便我們觀察 list.add(new OutOfMemory()); } } }
運(yùn)行程序后迅速打開(kāi)jconsole
,并找到自己編寫的類,點(diǎn)擊進(jìn)入,選擇不安全鏈接
> jconsole
由于我們使用的是成員變量,所以垃圾回收器一致不能回收內(nèi)存,所以整個(gè)堆的內(nèi)存趨勢(shì)是一路上漲.
代碼案例2:
package com.rumenz; import java.util.ArrayList; import java.util.List; public class OutOfMemory { public OutOfMemory() { byte []one=new byte[128*1024]; } public static void main(String[] args) throws InterruptedException { Thread.sleep(5000); append(100); } private static void append(int n) throws InterruptedException { List<OutOfMemory> list=new ArrayList<>(); for (int i = 0; i < n; i++) { Thread.sleep(3000); list.add(new OutOfMemory()); } } }
與上面代碼的區(qū)別我們one
變量有成員變量變成了局部變量. 局部變量在棧上分配內(nèi)存,當(dāng)方法結(jié)束,??臻g消失,棧上的變量或者引用地址將失效,本案例中one
對(duì)象是分配在堆內(nèi)存上,棧空間的消失導(dǎo)致one
對(duì)象無(wú)法被使用到,隨后就會(huì)被垃圾回收掉. 所以本案例的堆內(nèi)存變量將呈現(xiàn)出折線的效果.
以上就是Java垃圾回收jconsole分析的詳細(xì)內(nèi)容,更多關(guān)于Java垃圾回收jconsole的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot發(fā)送短信驗(yàn)證碼的實(shí)例
第三方短信發(fā)送平臺(tái)有很多種,各個(gè)平臺(tái)有各自的優(yōu)缺點(diǎn),在選擇的時(shí)候可以根據(jù)自己的具體實(shí)際情況定奪,本文主要介紹了SpringBoot發(fā)送短信驗(yàn)證碼的實(shí)例,感興趣的可以了解一下2022-02-02springcloud client指定注冊(cè)到eureka的ip與端口號(hào)方式
這篇文章主要介紹了springcloud client指定注冊(cè)到eureka的ip與端口號(hào)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03SpringBoot+Logback實(shí)現(xiàn)一個(gè)簡(jiǎn)單的鏈路追蹤功能
Spring Boot默認(rèn)使用LogBack日志系統(tǒng),并且已經(jīng)引入了相關(guān)的jar包,所以我們無(wú)需任何配置便可以使用LogBack打印日志。這篇文章主要介紹了SpringBoot+Logback實(shí)現(xiàn)一個(gè)簡(jiǎn)單的鏈路追蹤功能,需要的朋友可以參考下2019-10-10SpringBoot使用Mybatis-Generator配置過(guò)程詳解
這篇文章主要介紹了SpringBoot使用Mybatis-Generator配置過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02spring項(xiàng)目自定義全局響應(yīng)處理器統(tǒng)一處理響應(yīng)結(jié)果的實(shí)現(xiàn)步驟
本文詳細(xì)描述了如何通過(guò)@ControllerAdvice和ResponseBodyAdvice在SpringMVC項(xiàng)目中創(chuàng)建自定義響應(yīng)處理器,以及如何使用Wrapper類包裝和標(biāo)準(zhǔn)化返回結(jié)果,感興趣的朋友跟隨小編一起看看吧2025-01-01基于Spring Boot使用JpaRepository刪除數(shù)據(jù)時(shí)的注意事項(xiàng)
這篇文章主要介紹了Spring Boot使用JpaRepository刪除數(shù)據(jù)時(shí)的注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06