【Java 虚拟机原理】堆区 | Java VisualVM 工具

举报
韩曙亮 发表于 2022/01/14 01:22:55 2022/01/14
【摘要】 文章目录 一、Java VisualVM 工具二、堆区 一、Java VisualVM 工具 Java 中提供了一个监控当前设备 Java 程序的工具 Java V...





一、Java VisualVM 工具



Java 中提供了一个监控当前设备 Java 程序的工具 Java VisualVM ;

在命令行中执行

jvisualvm

  
 
  • 1

命令 , 可以打开该工具 ;

在这里插入图片描述

在这里插入图片描述

可以通过该程序监控 JVM 以及 Java 程序的运行参数 ;

在这里插入图片描述





二、堆区



堆区的对象分步如下图 :
在这里插入图片描述

堆区的对象 分为 年轻代 , 老年代 ;

老年代 占比大约 2 3 \cfrac{2}{3} 32 , 年轻代占比约 1 3 \cfrac{1}{3} 31 ;

年轻代 又分为 EdenSurvivor 区 , 其中 Eden 占 80 % 80\% 80% , Survivor 区 占 20 % 20\% 20% ;

Survivor 区又分为 FromTo 两部分 , 各占 10 % 10\% 10% ;


新创建的对象 , 放到 堆区 中 , 会先放到 Eden 区 ;

假设当前堆区内存是 300 MB , 老年代 200 MB , 年轻代 100 MB ;


Java 虚拟机启动后 , 一直再运行 , Eden 区 早晚会满 ;

如果 Eden 存放满了 , 就会进行 minor GC 操作 , 如果对象被判定为可以回收 , 就会将对象放到 Survivor 区 的 From 区域中 ; 此时 Eden 区就有空间了 ;


在对象头中每个对象都有一个分代年龄 , 记录当前对象被回收了多少次 , 每次 GC 回收 , 该分代年龄就 +1 ;

如果对象 分代年龄达到一定数值 , 如 15 , 则认为 该对象是无法回收的 , 会将该对象放到 老年代 区域 ;


老年代 区域总会被放满 , 如果老年代区域放满 , 就会 执行 full GC ; full GC 如果没有达到目的 , 没有空间存放新对象 , 就会 出现 OOM ;

注意区别 minor GCfull GC 两个回收机制 , minor GC 是针对 Eden 区放满的处理 , full GC 是针对 老年代区域放满进行的处理 ;


如果初始化了一个很大的对象 , 年轻代放不下 , 直接放到老年代 , 如果老年代也放不下 , OOM 送走这个进程 ;


JVM 调优就是修改上述 堆区的 Eden , Survivor , 老年代 区域的大小 , 以契合自己编写的应用特点 , 最大限度发挥出设备的性能 ; 一般是 J2EE 后端的事 , Android 开发仅做了解即可 ;

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/120071210

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。