Java垃圾回收jconsole分析

 更新时间:2023年07月24日 14:21:28   作者:用户bPbc8gB  
这篇文章主要为大家介绍了Java垃圾回收jconsole分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

环境

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

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

代码案例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对象无法被使用到,随后就会被垃圾回收掉. 所以本案例的堆内存变量将呈现出折线的效果.

以上就是Java垃圾回收jconsole分析的详细内容,更多关于Java垃圾回收jconsole的资料请关注脚本之家其它相关文章!

相关文章

  • 详解spring cloud feign踩坑记录

    详解spring cloud feign踩坑记录

    这篇文章主要介绍了spring cloud feign踩坑记录,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • SpringBoot发送短信验证码的实例

    SpringBoot发送短信验证码的实例

    第三方短信发送平台有很多种,各个平台有各自的优缺点,在选择的时候可以根据自己的具体实际情况定夺,本文主要介绍了SpringBoot发送短信验证码的实例,感兴趣的可以了解一下
    2022-02-02
  • Java封装好的mail包发送电子邮件的类

    Java封装好的mail包发送电子邮件的类

    本文给大家分享了2个java封装好的mail包发送电子邮件的类,并附上使用方法,小伙伴们可以根据自己的需求自由选择。
    2016-01-01
  • springcloud client指定注册到eureka的ip与端口号方式

    springcloud client指定注册到eureka的ip与端口号方式

    这篇文章主要介绍了springcloud client指定注册到eureka的ip与端口号方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java 读写锁源码分析

    Java 读写锁源码分析

    这篇文章主要介绍了Java 读写锁的相关资料,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-01-01
  • SpringBoot+Logback实现一个简单的链路追踪功能

    SpringBoot+Logback实现一个简单的链路追踪功能

    Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志。这篇文章主要介绍了SpringBoot+Logback实现一个简单的链路追踪功能,需要的朋友可以参考下
    2019-10-10
  • SpringBoot使用Mybatis-Generator配置过程详解

    SpringBoot使用Mybatis-Generator配置过程详解

    这篇文章主要介绍了SpringBoot使用Mybatis-Generator配置过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • spring项目自定义全局响应处理器统一处理响应结果的实现步骤

    spring项目自定义全局响应处理器统一处理响应结果的实现步骤

    本文详细描述了如何通过@ControllerAdvice和ResponseBodyAdvice在SpringMVC项目中创建自定义响应处理器,以及如何使用Wrapper类包装和标准化返回结果,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • 基于Spring Boot使用JpaRepository删除数据时的注意事项

    基于Spring Boot使用JpaRepository删除数据时的注意事项

    这篇文章主要介绍了Spring Boot使用JpaRepository删除数据时的注意事项,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java实现常用的三种加密算法详解

    Java实现常用的三种加密算法详解

    编程中常见的加密算法有以下几种:信息摘要算法、对称加密算法以及非对称加密算法。本文将利用Java实现这几种常见的加密算法,需要的可以参考一下
    2022-03-03

最新评论