`
mingjian01
  • 浏览: 29529 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

HotSpot VM 内存堆的两个Servivor区

JVM 
阅读更多

   今天看了一下 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? 这样设计的好处是什么?难道是因为在移动对象的时候需要压缩调整对象空间,所以这种整体移动的设计会快一点吗?希望大家一起来讨论一下 ^_^

 

顺便附上资料 《内存管理白皮书》

分享到:
评论

相关推荐

    Troubleshooting Guide for Java SE 6 with HotSpot VM

    ### Java SE 6与HotSpot VM故障排除指南关键知识点解析 #### 一、概述 《Java SE 6与HotSpot VM故障排除指南》是Oracle公司于2008年11月发布的一份技术文档,旨在帮助开发人员、系统管理员和技术支持人员解决在...

    hllvm.HotSpot VM Serial GC的一个问题1

    在HotSpot VM中,新生代通常分为Eden区和两个Survivor区(From和To)。Minor GC主要负责清理Eden区和一个Survivor区的对象。存活下来的对象会被移动到另一个Survivor区或者老年代。 在Serial GC中,FastScanClosure...

    借HSDB来探索HotSpot VM的运行时数据.gist1

    总的来说,HSDB是HotSpot VM的一个强大工具,它提供了丰富的功能来探索和理解JVM的运行时数据,包括内存布局、对象状态以及垃圾收集行为等。熟练掌握HSDB的使用,将极大地提升开发者对Java应用性能调优的能力。

    Compilation in the HotSpot VM-Zoltan-Majo.pdf

    HotSpot JVM 中的即时编译器可以分为两个部分:C1 编译器和 C2 编译器。C1 编译器是一个简单的编译器,用于编译小型方法,而 C2 编译器是一个高级编译器,用于编译大型方法。 除了即时编译外,HotSpot JVM 还支持 ...

    借HSDB来探索HotSpot VM的运行时数据1

    1. **t1**: 作为静态变量,`t1`存储在方法区(Method Area),在HotSpot VM中,这部分内存区域对应于"非堆"内存,用于存放类的信息,包括类的静态变量、常量池等。 2. **t2**: `t2`是`Test`类的一个实例变量,因此...

    hotspot.tar.gz

    Hotspot有两个JIT编译器:Client Compiler(C1)和Server Compiler(C2)。C1适用于快速启动,而C2则更注重长期性能。 二、垃圾收集器 Hotspot JVM提供了多种垃圾收集器,如Serial、Parallel、Concurrent Mark ...

    hllvm.借HSDB来探索HotSpot VM的运行时数据1

    在HotSpot VM中,静态变量实际存储在非堆内存的一个特殊区域,这部分内存并不受垃圾收集器管理。 2. **实例变量t2**:实例变量属于对象的一部分,当创建一个对象Test的实例时,t2会被分配到Java堆中。Java堆是JVM...

    The Java HotSpot VM.pdf

    1. **Java HotSpot虚拟机的JIT编译**:HotSpot是Java虚拟机的一个实现版本,由Oracle公司开发。它对运行在Java平台上的应用程序执行高效的JIT编译,将Java字节码转换成本地机器码以提高性能。JIT编译能够在程序运行...

    Hotspot VM源码

    HotSpot正是目前世界上java虚拟机的...还有两个runtime编译器(compilers )实现,正是他们帮助我们把类的字节码文件转换成本地的机器指令。当然还有大约3个垃圾收集器以及一系列用来实现同步的高性能运行库文件等等。

    官方HotSpot内存管理文档

    因此,垃圾收集器将堆内存分为新生代、老年代等多个区域,以便更有效地进行内存管理和回收。 Java 5.0版本中引入的HotSpot JVM包括多种垃圾收集器。例如,串行收集器是单线程的,并且在进行垃圾收集时会暂停所有...

    hotspot源码

    2. 内存管理:HotSpot将内存分为堆(Heap)和非堆(Non-Heap)两部分,堆内存主要用于对象实例的存储,非堆内存则包含方法区和JVM自身的数据结构。源码中,`MemoryManager`与`GarbageCollector`密切合作,实现内存...

    jvm技术精华-架构师必备

    这标志着HotSpot VM正式成为Sun JDK和OpenJDK两个实现高度一致的项目中的共同虚拟机。 随着2008年和2009年Oracle公司分别收购BEA和Sun公司,Oracle拥有了两款顶级Java虚拟机:JRockit VM和HotSpot VM。Oracle公司...

    java-jdk-hotspot源码

    学习JDK 源码必备,提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。 但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初...

    《HotSpot实战》

    5. **内存模型**:HotSpot虚拟机内存分为堆(Heap)、栈(Stack)、方法区(Method Area)和本地方法栈(Native Method Stack)等区域,书中会解释各部分的作用,以及如何调整内存参数以优化性能。 6. **性能监控和...

    HotSpot Runtime概述

    **C++堆管理**涉及到垃圾收集和内存分配,HotSpot使用复杂的垃圾回收算法来优化内存使用和程序性能。 **Java本地接口(JNI)**允许Java代码调用本地(C/C++)代码,提供与操作系统和硬件更直接的交互。 **VM致命...

    Java Performance Companion(Addison,2016)

    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虚拟机的内存管理.pdf

    ### Java HotSpot虚拟机的内存管理 #### 一、引言 Java HotSpot虚拟机作为Sun Microsystems(现已被Oracle收购)开发的一款高性能JVM(Java虚拟机),在内存管理方面有着独特而强大的机制。本文旨在深入探讨Java ...

    [百度网盘] HotSpot实战[完整版][带书签].pdf

    - **内存区域划分**:HotSpot将堆内存分为不同的区域,如年轻代、老年代、永久代等,并且提供了详细的配置选项供用户调整。 ### 实战案例分析 #### 1. **性能调优** - **JVM参数调整**:通过调整-Xms、-Xmx、-XX...

Global site tag (gtag.js) - Google Analytics