欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java垃圾回收jconsole分析

 更新時(shí)間:2023年07月24日 14:21:28   作者:用戶bPbc8gB  
這篇文章主要為大家介紹了Java垃圾回收jconsole分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

環(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)文章

最新評(píng)論