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

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

文章目录

一、Java VisualVM 工具

二、堆区





一、Java VisualVM 工具


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


在命令行中执行


jvisualvm


命令 , 可以打开该工具 ;


image.png

image.png



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



image.png





二、堆区


堆区的对象分步如下图 :

image.png


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


老年代 占比大约 2 3 \cfrac{2}{3}

3

2


 , 年轻代占比约 1 3 \cfrac{1}{3}

3

1


 ;


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


Survivor 区又分为 From 和 To 两部分 , 各占 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 GC 和 full GC 两个回收机制 , minor GC 是针对 Eden 区放满的处理 , full GC 是针对 老年代区域放满进行的处理 ;



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



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


目录
相关文章
|
14天前
|
存储 Java
深入理解Java虚拟机:JVM内存模型
【4月更文挑战第30天】本文将详细解析Java虚拟机(JVM)的内存模型,包括堆、栈、方法区等部分,并探讨它们在Java程序运行过程中的作用。通过对JVM内存模型的深入理解,可以帮助我们更好地编写高效的Java代码,避免内存溢出等问题。
|
5天前
|
Java 索引
深入浅出JVM(五)之Java中方法调用
深入浅出JVM(五)之Java中方法调用
|
5天前
|
算法 安全 Java
深入探索Java中的并发编程:CAS机制的原理与应用
总之,CAS机制是一种用于并发编程的原子操作,它通过比较内存中的值和预期值来实现多线程下的数据同步和互斥,从而提供了高效的并发控制。它在Java中被广泛应用于实现线程安全的数据结构和算法。
21 0
|
6天前
|
Oracle Java Serverless
JVM工作原理与实战(三十六):GraalVM虚拟机
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了GraalVM、GraalVM的两种运行模式、GraalVM应用场景、参数优化和故障诊断等内容。
14 1
|
7天前
|
Java 编译器 对象存储
java一分钟之Java入门:认识JDK与JVM
【5月更文挑战第7天】本文介绍了Java编程的基础——JDK和JVM。JDK是包含编译器、运行时环境、类库等的开发工具包,而JVM是Java平台的核心,负责执行字节码并实现跨平台运行。常见问题包括版本不匹配、环境变量配置错误、内存溢出和线程死锁。解决办法包括选择合适JDK版本、正确配置环境变量、调整JVM内存参数和避免线程死锁。通过代码示例展示了JVM内存管理和基本Java程序结构,帮助初学者更好地理解JDK和JVM在Java编程中的作用。
20 0
|
7天前
|
存储 监控 安全
JVM工作原理与实战(十六):运行时数据区-Java虚拟机栈
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了运行时数据区、Java虚拟机栈等内容。
11 0
|
8天前
|
存储 缓存 安全
【 Java中String源码分析(JVM视角你不来看看?】
【 Java中String源码分析(JVM视角你不来看看?】
13 0
|
8天前
|
搜索推荐 Java Shell
8大Java排序方法(由简入繁),有代码详解和原理指导
8大Java排序方法(由简入繁),有代码详解和原理指导
32 0
|
监控 Java Linux
|
21天前
|
监控 Ubuntu Java
Java VisualVM远程监控JVM
Java VisualVM远程监控JVM
Java VisualVM远程监控JVM