环境: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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ehZ0lJTS-1602860014844)(https://tva1.sinaimg.cn/large/007S8ZIlgy1gjr4rae038j31560lwwg6.jpg)]

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

环境: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分析相关推荐

  1. JAVA垃圾回收-可达性分析算法

    在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行.那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收.不失一般性,如果一个对象没有任何引用与之关联 ...

  2. 细述 Java垃圾回收机制→Java Garbage Collection Monitoring and Analysis

    本文非原创,翻译自Java Garbage Collection Monitoring and Analysis 在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的.和C语言不一样的 ...

  3. [译]GC专家系列2:Java 垃圾回收的监控

    原文链接:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/ 这是GC专家系列文章的第二篇. ...

  4. JVM成神之路-Java垃圾回收

    Java垃圾回收机制 为什么要进行垃圾回收? 随着程序的运行,内存中存在的实例对象.变量等信息占据的内存越来越多,如果不及时进行垃圾回收,必然会带来程序性能的下降,甚至会因为可用内存不足造成一些不必要 ...

  5. 假期三天,我肝了万字的Java垃圾回收,看完你还敢说不会?

    大家好,我是狂聊,上一篇已经把 Jvm 的运行区数据和类加载机制聊完了. 今天来说说 Java 垃圾回收,高频面试问题. 提纲附上,话不多说,直接干货 1.什么是垃圾回收? 垃圾回收(Garbage ...

  6. java垃圾回收机制_笔记 | Java垃圾回收机制

    本文经授权转载自程序员杂货铺(ID:speakFramework) 垃圾回收 最近上海的小伙伴是不是要被强垃圾分类搞疯了???哈哈哈哈 上海是个走在前列的城市啊,不光骑自行车闯红灯要被罚钱,垃圾不分类 ...

  7. Java 垃圾回收机 GC Roots详解(Garbage Collection Roots)

    背景: 之前面试阿里支付宝,被问到常见的GC Root 是什么? 当时自己支支吾吾,明明自己看过深入理解Java 虚拟机这本书,但是就是回答不上来. 后来自己工作中,遇到内存泄漏问题.我百度,下载了M ...

  8. Java垃圾回收机制(Garbage Collection)

    引用博客地址:http://www.cnblogs.com/ywl925/p/3925637.html 以下两篇博客综合描述Java垃圾回收机制 第一篇:说的比较多,但是不详细 http://www. ...

  9. java垃圾回收机制串行_Java垃圾回收机制

    Java语言是一门自动内存管理的语言,不再需要的对象可以通过垃圾回收自动进行内存释放. Java运行时内存区域划分 JVM将Java程序运行时内存区域划分成以下几个部分: 程序计数器(Program ...

最新文章

  1. Git 2.18版本发布:支持Git协议v2,提升性能
  2. 2015年蓝桥杯省赛第5题--九数组分数
  3. matlab r2012a win10,vs2010和Matlab R2012a 混合编程
  4. 8255控制四个双色灯C语言,汇编语言实现通过8255A和4个开关控制实现8个LED灯和8个7位数码管显示指定数字全亮、全灭、从左至右、从右至左跑马灯式点亮...
  5. Mysql的concat concat_ws group_concat
  6. SAP Analytics Cloud的Sample Story
  7. c语言实现两个有序链表的合并(代码示例)
  8. Python爬虫番外篇之Cookie和Session
  9. java持续集成soapui_接口自动化测试持续集成--Soapui接口功能测试参数化
  10. sklearn_收入模型
  11. 梯度下降和delta法则
  12. 《模拟电子技术基础》-(童诗白)笔记
  13. 录像机CIF、D1、720P、960P、1080P分辨率及硬盘所占空间
  14. 下载赚钱利器之千脑网盘WordPress插件
  15. 怎么把PDF文件转换成图片?这两种方法可以收藏下来
  16. 如何恢复被杀毒软件删除的文件
  17. ping: www.baidu.com: 域名解析暂时失败 简单解决
  18. Android 科大讯飞语音评测SDK 踩坑实录
  19. 对“数字+企业数字化+数据中台”的灵魂追问
  20. 【路由器连接天翼网关2.0问题解决思路】

热门文章

  1. PAT 1081. 检查密码 (15) - 乙级
  2. 使用Dev-C++查看vector数组中的变量值
  3. PAT 乙级 1031. 查验身份证(15) Java版
  4. 【Objective-C】类与结构体的区别
  5. 蓝桥杯 BASIC-24 基础练习 龟兔赛跑预测
  6. jsx 调用php,JavaScript_JavaScript的React框架中的JSX语法学习入门教程,什么是JSX? 在用React写组件的 - phpStudy...
  7. map is not in the sudoers file.This incident will be reported.的解决方法
  8. 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
  9. Jenkins+Github(Robotframework代码)
  10. 【EMC】电压暂降、短时中断和电压变化