美文网首页程序员
Java垃圾回收之jconsole分析

Java垃圾回收之jconsole分析

作者: 若丨寒 | 来源:发表于2020-10-17 09:52 被阅读0次

环境:jdk1.8+Mac+Idea

为了便于观察我们设置了虚拟机的参数 VM oprions , -Xms10m -Xmx10m

代码案例1:
新建了一个数组,向里面添加100个 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); //延时5秒,方便我们打开`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());
        }

    }
}

运行程序后迅速打开 jconsole ,并找到自己编写的类,点击进入,选择不安全链接

> jconsole
image.png

由于我们使用的是成员变量,所以垃圾回收器一致不能回收内存,所以整个堆的内存趋势是一路上涨.

image.png

代码案例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());
        }

    }
}

与上面代码的区别我们 one 变量有成员变量变成了局部变量. 局部变量在栈上分配内存,当方法结束,栈空间消失,栈上的变量或者引用地址将失效,本案例中 one 对象是分配在堆内存上,栈空间的消失导致 one 对象无法被使用到,随后就会被垃圾回收掉. 所以本案例的堆内存变量将呈现出折线的效果.

image.png

来源:https://www.tuicool.com/articles/ne2YraB

相关文章

  • Java垃圾回收之jconsole分析

    环境:jdk1.8+Mac+Idea 为了便于观察我们设置了虚拟机的参数 VM oprions , -Xms10m...

  • JDK可视化工具

    jconsole 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器...

  • 初步学习JVM底层原理(二)

    Java之JVM垃圾回收 内存结构以及垃圾回收算法 作为Java语言的核心之一,JVM垃圾回收帮我们解决了让我们很...

  • Java 垃圾回收器之G1详解

    Java 垃圾回收器之G1详解 概述 G1垃圾回收器是在Java7 update 4之后引入的一个新的垃圾回收器。...

  • Java 内存区域和GC机制

    Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与...

  • Java面试题目录

    垃圾回收 面试题-Java基础-垃圾回收 java垃圾回收 集合 40个Java集合面试问题和答案 Java集合框...

  • Java面试题目录

    垃圾回收 面试题-Java基础-垃圾回收 java垃圾回收 集合 40个Java集合面试问题和答案 Java集合框...

  • JAVA垃圾回收

    JAVA垃圾回收 时间:20180307 问题: 如何判定对象为垃圾对象引用计数法可达性分析法 如何回收回收策略标...

  • JVM垃圾回收算法

    Java基础:JVM垃圾回收算法 [toc] 参考:Java基础:JVM垃圾回收算法图解JVM垃圾回收算法 总结:...

  • Java垃圾回收之复制算法详解

    Java垃圾回收之复制算法详解 之前的Java垃圾回收之标记清除算法详解会导致内存碎片。下文的介绍的coping算...

网友评论

    本文标题:Java垃圾回收之jconsole分析

    本文链接:https://www.haomeiwen.com/subject/riyxmktx.html