今天看了一下 HotSpot JVM (下简称JVM)的内存管理,先来简单说说我的理解吧。
JVM将堆分成了 二个大区 Young 和 Old 如下图:
而Young 区又分为 Eden、Servivor1、Servivor2, 两个Survivor 区相对地作为为From 和 To 逻辑区域, 当Servivor1作为 From 时 , Servivor2 就作为 To, 反之亦然
如下图:
因此当Eden区满的时候 GC执行,这时会将 Eden 区和 From 区中还被引用的对象会被移到 To区 ,个别大对象和部分From对象在To已满的情况下会被放到Old区,如下图:
GC操作执行完之后 Eden和 From 区将会为空(无引用对象被回收,有引用对象被移到To和Old区) ,并且From 和 To在逻辑上的 概念调换 , From 概念上变成了To,To变成了From(如果Servior1 原来作为 From 区 ,现在Servior1 现在就作为 To 区),GC执行后结果如下图:
第一次发贴,有什么问题请大家指正一下。有个地方不太清楚 ,为什么需要From 和 To 两个平行的区呢,为什么不直接从Survivor 移到 Old? 这样设计的好处是什么?难道是因为在移动对象的时候需要压缩调整对象空间,所以这种整体移动的设计会快一点吗?希望大家一起来讨论一下 ^_^
顺便附上资料 《内存管理白皮书》
分享到:
相关推荐
### Java SE 6与HotSpot VM故障排除指南关键知识点解析 #### 一、概述 《Java SE 6与HotSpot VM故障排除指南》是Oracle公司于2008年11月发布的一份技术文档,旨在帮助开发人员、系统管理员和技术支持人员解决在...
在HotSpot VM中,新生代通常分为Eden区和两个Survivor区(From和To)。Minor GC主要负责清理Eden区和一个Survivor区的对象。存活下来的对象会被移动到另一个Survivor区或者老年代。 在Serial GC中,FastScanClosure...
总的来说,HSDB是HotSpot VM的一个强大工具,它提供了丰富的功能来探索和理解JVM的运行时数据,包括内存布局、对象状态以及垃圾收集行为等。熟练掌握HSDB的使用,将极大地提升开发者对Java应用性能调优的能力。
HotSpot JVM 中的即时编译器可以分为两个部分:C1 编译器和 C2 编译器。C1 编译器是一个简单的编译器,用于编译小型方法,而 C2 编译器是一个高级编译器,用于编译大型方法。 除了即时编译外,HotSpot JVM 还支持 ...
1. **t1**: 作为静态变量,`t1`存储在方法区(Method Area),在HotSpot VM中,这部分内存区域对应于"非堆"内存,用于存放类的信息,包括类的静态变量、常量池等。 2. **t2**: `t2`是`Test`类的一个实例变量,因此...
Hotspot有两个JIT编译器:Client Compiler(C1)和Server Compiler(C2)。C1适用于快速启动,而C2则更注重长期性能。 二、垃圾收集器 Hotspot JVM提供了多种垃圾收集器,如Serial、Parallel、Concurrent Mark ...
在HotSpot VM中,静态变量实际存储在非堆内存的一个特殊区域,这部分内存并不受垃圾收集器管理。 2. **实例变量t2**:实例变量属于对象的一部分,当创建一个对象Test的实例时,t2会被分配到Java堆中。Java堆是JVM...
1. **Java HotSpot虚拟机的JIT编译**:HotSpot是Java虚拟机的一个实现版本,由Oracle公司开发。它对运行在Java平台上的应用程序执行高效的JIT编译,将Java字节码转换成本地机器码以提高性能。JIT编译能够在程序运行...
HotSpot正是目前世界上java虚拟机的...还有两个runtime编译器(compilers )实现,正是他们帮助我们把类的字节码文件转换成本地的机器指令。当然还有大约3个垃圾收集器以及一系列用来实现同步的高性能运行库文件等等。
因此,垃圾收集器将堆内存分为新生代、老年代等多个区域,以便更有效地进行内存管理和回收。 Java 5.0版本中引入的HotSpot JVM包括多种垃圾收集器。例如,串行收集器是单线程的,并且在进行垃圾收集时会暂停所有...
2. 内存管理:HotSpot将内存分为堆(Heap)和非堆(Non-Heap)两部分,堆内存主要用于对象实例的存储,非堆内存则包含方法区和JVM自身的数据结构。源码中,`MemoryManager`与`GarbageCollector`密切合作,实现内存...
这标志着HotSpot VM正式成为Sun JDK和OpenJDK两个实现高度一致的项目中的共同虚拟机。 随着2008年和2009年Oracle公司分别收购BEA和Sun公司,Oracle拥有了两款顶级Java虚拟机:JRockit VM和HotSpot VM。Oracle公司...
学习JDK 源码必备,提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。 但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初...
5. **内存模型**:HotSpot虚拟机内存分为堆(Heap)、栈(Stack)、方法区(Method Area)和本地方法栈(Native Method Stack)等区域,书中会解释各部分的作用,以及如何调整内存参数以优化性能。 6. **性能监控和...
**C++堆管理**涉及到垃圾收集和内存分配,HotSpot使用复杂的垃圾回收算法来优化内存使用和程序性能。 **Java本地接口(JNI)**允许Java代码调用本地(C/C++)代码,提供与操作系统和硬件更直接的交互。 **VM致命...
The authors, who are all leading Java performance and Java HotSpot VM experts, help you improve performance by using modern software engineering practices, avoiding common mistakes, and applying tips ...
### Java HotSpot虚拟机的内存管理 #### 一、引言 Java HotSpot虚拟机作为Sun Microsystems(现已被Oracle收购)开发的一款高性能JVM(Java虚拟机),在内存管理方面有着独特而强大的机制。本文旨在深入探讨Java ...
- **内存区域划分**:HotSpot将堆内存分为不同的区域,如年轻代、老年代、永久代等,并且提供了详细的配置选项供用户调整。 ### 实战案例分析 #### 1. **性能调优** - **JVM参数调整**:通过调整-Xms、-Xmx、-XX...