采用分区管理机制的JVM将JVM所管理的所有内存资源分为2个大的部分:永久存储区(Permanent Space)和堆空间(The Heap Space)。其中堆空间又分为新生区(Young (New) generation space)和养老区(Tenure (Old) generation space),新生区又分为伊甸园(Eden space),幸存者0区(Survivor 0 space)和幸存者1区(Survivor 1 space)。
JVM分区用途:
永久存储区(Permanent Space):永久存储区是JVM的驻留内存,用于存放JDK自身所携带的Class,Interface的元数据,应用服务器允许必须的Class,Interface的元数据和Java程序运行时需要的Class和Interface的元数据。被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭JVM时,释放此区域所控制的内存。
堆空间(The Heap Space):是JAVA对象生死存亡的地区,JAVA对象的出生,成长,死亡都在这个区域完成。堆空间又分别按JAVA对象的创建和年龄特征分为养老区和新生区。
新生区(Young (New) generation space):新生区的作用包括JAVA对象的创建和从JAVA对象中筛选出能进入养老区的JAVA对象。
伊甸园(Eden space):JAVA对空间中的所有对象在此出生,该区的名字因此而得名。也即是说当你的JAVA程序运行时,需要创建新的对象,JVM将在该区为你创建一个指定的对象供程序使用。创建对象的依据即是永久存储区中的元数据。
幸存者0区(Survivor 0 space)和幸存者1区(Survivor1 space):当伊甸园的控件用完时,程序又需要创建对象;此时JVM的垃圾回收器将对伊甸园区进行垃圾回收,将伊甸园区中的不再被其他对象所引用的对象进行销毁工作。同时将伊甸园中的还有其他对象引用的对象移动到幸存者0区。幸存者0区就是用于存放伊甸园垃圾回收时所幸存下来的JAVA对象。当将伊甸园中的还有其他对象引用的对象移动到幸存者0区时,如果幸存者0区也没有空间来存放这些对象时,JVM的垃圾回收器将对幸存者0区进行垃圾回收处理,将幸存者0区中不在有其他对象引用的JAVA对象进行销毁,将幸存者0区中还有其他对象引用的对象移动到幸存者1区。幸存者1区的作用就是用于存放幸存者0区垃圾回收处理所幸存下来的JAVA对象。
养老区(Tenure (Old) generation space):用于保存从新生区筛选出来的JAVA对象。
上面我们看了JVM的内存分区管理,现在我们来看JVM的垃圾回收工作是怎样运作的。首先当启动J2EE应用服务器时,JVM随之启动,并将JDK的类和接口,应用服务器运行时需要的类和接口以及J2EE应用的类和接口定义文件以及编译后的Class文件或JAR包中的Class文件装载到JVM的永久存储区。在伊甸园中创建JVM应用服务器运行时必须的JAVA对象,创建J2EE应用启动时必须创建的JAVA对象;J2EE应用启动完毕,可对外提供服务。
JVM在伊甸园区根据用户的每次请求创建相应的JAVA对象,当伊甸园的空间不足以用来创建新JAVA对象的时候,JVM的垃圾回收器执行对伊甸园区的垃圾回收工作,销毁那些不再被其他对象引用的JAVA对象(如果该对象仅仅被一个没有其他对象引用的对象引用的话,此对象也被归为没有存在的必要,依此类推),并将那些被其他对象所引用的JAVA对象移动到幸存者0区。
如果幸存者0区有足够控件存放则直接放到幸存者0区;如果幸存者0区没有足够空间存放,则JVM的垃圾回收器执行对幸存者0区的垃圾回收工作,销毁那些不再被其他对象引用的JAVA对象(如果该对象仅仅被一个没有其他对象引用的对象引用的话,此对象也被归为没有存在的必要,依此类推),并将那些被其他对象所引用的JAVA对象移动到幸存者1区。
如果幸存者1区有足够控件存放则直接放到幸存者1区;如果幸存者0区没有足够空间存放,则JVM的垃圾回收器执行对幸存者0区的垃圾回收工作,销毁那些不再被其他对象引用的JAVA对象(如果该对象仅仅被一个没有其他对象引用的对象引用的话,此对象也被归为没有存在的必要,依此类推),并将那些被其他对象所引用的JAVA对象移动到养老区。
如果养老区有足够控件存放则直接放到养老区;如果养老区没有足够空间存放,则JVM的垃圾回收器执行对养老区区的垃圾回收工作,销毁那些不再被其他对象引用的JAVA对象(如果该对象仅仅被一个没有其他对象引用的对象引用的话,此对象也被归为没有存在的必要,依此类推),并保留那些被其他对象所引用的JAVA对象。如果到最后养老区,幸存者1区,幸存者0区和伊甸园区都没有空间的话,则JVM会报告“JVM堆空间溢出(java.lang.OutOfMemoryError: Java heap space)”,也即是在堆空间没有空间来创建对象。
这就是JVM的内存分区管理,相比不分区来说;一般情况下,垃圾回收的速度要快很多;因为在没有必要的时候不用扫描整片内存而节省了大量时间。
分享到:
相关推荐
Java虚拟机(JVM)内存模型是Java编程中不可或缺的一部分,它主要分为以下几个分区: 1. **程序计数器(Program Counter Register)** - 这是每个线程独享的内存区域,用于存储当前线程正在执行的字节码指令的行号...
对于方法区的管理,JVM提供了一定的灵活性,允许根据需要动态调整其大小。 #### C/C++内存分区 C/C++的内存管理更为灵活且复杂,主要分为以下几个区域: 1. **代码区**:存放程序的机器指令,通常只读,不可修改...
1. **堆内存管理**:Java对象主要存储在堆内存中,JVM通过新生代、老年代、永久代(在Java 8之后变为元空间)等分区来优化垃圾回收。 2. **栈内存管理**:每个线程都有一个独立的栈,用于存储方法调用帧,包括局部...
在Java开发过程中,对JVM(Java虚拟机)的监控是至关重要的,它能帮助我们了解应用程序的运行状态,优化性能,以及及时发现并解决内存泄漏等问题。...记住,理解JVM内存管理机制是提升Java应用性能的关键步骤。
### JVM性能调优——JVM内存管理与GC回收详解 #### 概览 在现代软件开发领域,Java凭借其强大的跨平台能力和丰富的生态系统成为企业级应用的首选语言之一。然而,随着应用程序复杂度的提高以及业务需求的变化,...
【JVM全方位理解实战】 Java虚拟机(JVM)是Java程序的核心,它负责解析字节码并...总之,理解JVM的工作原理和内存管理机制,可以帮助开发者优化程序性能,避免内存溢出或性能瓶颈,确保Java应用程序高效稳定运行。
根据提供的文档内容,我们可以深入探讨以下几个关键的JVM知识点: ### 1....通过这些详细的解释,我们可以更好地理解JVM内存管理的核心概念和技术细节,这对于理解和优化Java应用程序的性能至关重要。
在Android应用程序开发过程中,性能优化是至关重要的环节,而Java虚拟机(JVM)内存管理则是其中的关键部分。"JVM Memory View"工具,版本号为0.93.162,就是针对这一需求而设计的JVM调试内存查看器,专为Android ...
了解JVM的工作原理对于性能优化、内存管理以及故障排查至关重要。 例如,JVM的堆内存分为年轻代和老年代,其中新生代又分为Eden区和两个Survivor区,这样的设计是为了优化垃圾回收效率。而方法区则存储类信息、常量...
IBM JVM在内存管理上有着精细的分区,如年轻代、老年代和持久代,以适应不同生命周期的对象。年轻代主要存放新创建的对象,经过垃圾收集后存活下来的对象会被移动到老年代。持久代则存储类的元数据信息。 垃圾收集...
基本垃圾回收算法涉及到如何识别和回收不再使用的对象,而分代垃圾回收则是对堆空间进行分区,以更好地管理不同生命周期的对象。垃圾回收面临的问题包括处理速度、暂停时间和内存碎片等问题。 在典型配置举例部分,...
Java虚拟机(JVM)是Java平台的核心组成部分,它是Java程序的运行环境,负责执行字节码并管理内存、线程和类加载等。JVM使得Java具备了“一次编写,到处运行”的特性。在面试中,对JVM的理解深度往往能体现一个...
6. **JVM内存管理** - **垃圾收集(Garbage Collection)**:自动回收不再使用的对象所占用的内存空间,避免内存泄露。 - **内存分区**:包括新生代(Young Generation)、老年代(Old Generation)和永久代(Perm...
JVM内存管理是Java虚拟机的核心机制之一,其主要包含对象的创建、内存分配、垃圾回收以及内存释放等过程。在JVM中,垃圾回收(GC)是自动管理内存的关键技术,其目的是回收不再使用的对象所占用的内存空间,以避免...
总结,JVM调优和Java内存管理是优化Java应用性能的关键,涉及垃圾回收算法、内存分区、GC类型以及各种JVM参数的调整。理解这些概念有助于我们更好地理解和优化应用程序的内存使用,从而提升整体系统性能。
GC机制负责自动管理Java内存,避免程序员手动处理内存分配和释放,从而减少内存泄漏和程序崩溃的风险。本文将深入探讨JVM的垃圾回收机制,并分享一些优化GC性能的有效策略。 首先,理解JVM内存模型至关重要。JVM...
- **直接内存**:这部分内存并不属于JVM管理的内存的一部分,它由`NIO`类通过`sun.misc.Unsafe`的API直接分配。它的大小不受`-Xmx`的影响,而是受到本机总内存的限制。 - **Java栈**:每个线程拥有一个独立的Java栈...
Java虚拟机(JVM)是Java程序运行的基础,它的内存管理是面试中常见的技术话题。以下是对JVM内存模型及面试常见问题的详细解释: 1. **内存模型及分区** - **方法区(Method Area)**:存储类信息、常量池(包括...
垃圾回收是JVM中的一个重要机制,用于自动管理内存,避免程序员手动进行繁琐且易出错的内存释放。JVM提供了多种GC算法,如串行GC、并行GC、并发标记清除(CMS)、G1垃圾收集器和ZGC等。这些算法各有优缺点,适用于...