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,并找到自己編寫(xiě)的類,點(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)存上,??臻g的消失導(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-02
springcloud client指定注冊(cè)到eureka的ip與端口號(hào)方式
這篇文章主要介紹了springcloud client指定注冊(cè)到eureka的ip與端口號(hào)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
SpringBoot+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-10
SpringBoot使用Mybatis-Generator配置過(guò)程詳解
這篇文章主要介紹了SpringBoot使用Mybatis-Generator配置過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
spring項(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

