本来想一次性将java虚拟机上的垃圾回收机制弄懂的,看了几篇关于这方面的文章之后发现,要想把这一方面的知识全部弄清楚还需要深入研究吖!下面就先将JVM垃圾回收的机制大致的说一下吧!
不知道大家是否还记得java中栈和堆的概念,栈是java程序运行时用的,它可以展示性的存放一些临时变量,堆就是用来存放数据的,栈中的变量指向堆地址中的数据,首先让我们全面看一下JVM的结构框架图吧:
上篇博客里面写到了类加载器,现在来讲讲堆吧!正因为java中将栈和堆的概念分开了,才会出现垃圾回收的机制,因为每次创建一个新的对象就要在对中开辟一块内存将其储存起来!
java中垃圾收集简称GC(garbage collection),JVM中的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,是由于有内存的限制,JVM中才实现由垃圾回收所管理的堆。
堆空间又划分三个代,年轻代、年老代、永久代,这个是按照不同的对象按照不同的生命周期来划分的,从字面上就可以看出,年轻代存放的对象的生命周期最短,年老代存放的对象的生命周期比较长,永久代存放的对象的生命周期是最长的,像什么静态(static)对象等。年轻代由分为eden和两个survivor区间,两个survivor的大小是一样的。如图所示:
JVM垃圾回收机制大致是这样的:
1、创建一个对象在eden中进行内存分配
2、当eden内存不够的时候,就会进行垃圾回收,触发minorGC(有的称scavenger GC)机制,在eden和一个survivor区间进行垃圾回收
3、在进行minorGC的时候,是将eden和一个survivor中还存活的对象放在另一个空的survivor中,再清空之前的eden和survivor,这两个survivor必须保证有一个为空
4、当完成第3步之后,后面加进来的新的对象将这个survivor占满了的时候,再将survivor中的对象copying到old generation区段
5、当old generation也满了的时候,再进行全面的垃圾回收(full GC),即将young generation、old generation和permanent generation进行清理
将JVM垃圾回收机制的流程之后,我们主要是要对其进行优化,因为
垃圾收集的一大缺陷是:它的开销影响程序性能,为了提高垃圾收集的效率,其关键要素是minorGC和fullGC阶段,同时还有堆中各个部分的大小也影响着垃圾收集的效率,换句话说,垃圾收集机制的核心就是算法和JVM各参数的设置,目前我还在研究当中。。。
<!--EndFragment-->
- 大小: 12.6 KB
- 大小: 16.8 KB
分享到:
相关推荐
- **概念**: 相比引用计数算法,可达性分析算法更加高效且广泛应用于现代垃圾收集器中。 - **工作原理**: 该算法通过追踪从一组根对象开始的所有引用链来确定对象的可达性。若对象不可达,则被认定为垃圾。 - **根...
- JVM规格详细定义了虚拟机的各个方面,包括内存模型、类加载机制、执行引擎、垃圾收集算法等。开发者根据这个规格来实现JVM,确保Java程序可以在任何遵循JVM规范的环境中正确运行。 5. **JVM的工作流程** - **类...
在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这...
- Java的垃圾收集机制自动回收不再使用的对象占用的内存,避免内存泄漏。 - 主要有几种GC算法,如复制算法(年轻代)、标记-整理算法(老年代)、标记-清除算法,以及分代收集。 - CMS(Concurrent Mark Sweep)...
通过调整JVM参数,如堆大小、新生代和老年代的比例、垃圾收集器的选择等,可以改善程序的运行效率和稳定性。同时,开发者还应遵循良好的编程习惯,减少不必要的对象创建,及时释放不再使用的资源,以降低垃圾回收的...
Java的G1(Garbage First)垃圾收集器是一种先进的垃圾回收机制,主要设计目标是实现低延迟、高吞吐量的内存管理。G1垃圾收集器是Java虚拟机(JVM)的一部分,它引入了区域(Region)的概念,将堆内存划分为多个固定...
本篇文章主要探讨了JVM内存管理、垃圾收集器及其优化策略。 首先,Java的内存管理主要包括对象的分配与回收,主要发生在堆内存中。堆被划分为新生代和老年代,新生代又细分为Eden、From Survivor和To Survivor空间...
Java垃圾收集器是Java虚拟机(JVM)中的一种自动内存管理机制,旨在释放程序员从手动内存管理的繁琐工作中解脱出来。垃圾收集器通过跟踪对象的引用关系,确定哪些对象是可以被释放的,然后将其回收,以避免内存泄露...
- **JVM的垃圾收集策略**:现代JVM提供了多种垃圾收集器,如串行收集器(Serial Collector)、并行收集器(Parallel Collector)、并发标记-清扫收集器(Concurrent Mark-Sweep Collector)等,每种收集器都针对不同...
- JVM负责自动管理内存,通过垃圾收集机制回收不再使用的对象所占用的空间。 - 常见的垃圾收集算法有标记-清除、复制、标记-整理和分代收集等。 4. **类加载机制**: - 双亲委派模型:当一个类加载器需要加载类...
你可以在这个仓库中找到关于字节码操作的示例,学习如何查看和理解字节码,以及其在JVM中的执行流程。 3. **JVM内存模型**: JVM内存主要分为堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、程序计数器...
3. **监控和诊断**:使用JMX(Java Management Extensions)或专门的工具如VisualVM,对JVM的内存使用和垃圾收集情况进行实时监控,找出性能瓶颈。 4. **减少内存泄漏**:避免创建过多的短生命周期对象,尤其是大...
### JVM详解与学习 #### Java相关 ##### 1.1 Java定义 Java 是一种广泛使用的高级编程语言,具有面向...以上内容覆盖了JVM的基础知识、内存管理和垃圾收集等方面,对于深入理解Java应用程序的运行机制非常有帮助。
16、解释下JVM内部各种垃圾收集算法 17、解释下CMS收集器垃圾收集过程 18、CMS比较严重的问题并发收集阶段再次触发Full gc怎么处理 19、解释下垃圾收集底层三色标记算法 20、解释下对象漏标的处理方案增量更新与原始...
这份"Java技术资料"中的"Java垃圾收集必备手册"很可能包含了关于Java内存管理、垃圾收集机制、垃圾收集器以及如何优化垃圾收集的一些关键知识点。以下是这些主题的详细说明: 1. **Java内存模型**:Java内存分为堆...
通过以上对JVM内存模型和垃圾收集策略的分析,可以看出JVM内存管理的复杂性以及垃圾收集机制的重要性。了解和掌握这些知识点,对于开发高性能Java应用是非常有帮助的。在实际开发过程中,合理配置JVM参数、选择合适...
3. **垃圾收集**:JVM内置了自动内存管理机制,垃圾收集器负责回收不再使用的对象,以防止内存泄漏。不同的垃圾收集算法如标记-清除、复制、标记-整理、分代收集等各有特点。 4. **运行时数据区域**:详细描述了...
4. **垃圾收集机制**:GC是JVM自动管理内存的主要手段,涉及分代收集、标记-清除、复制、标记-整理等多种算法。书中会详细介绍各种算法的工作原理、优缺点,以及在不同场景下的选择。 5. **GC调优**:包括如何分析...
1. **堆内存**: 分为新生代和老年代,使用垃圾收集机制自动回收无用对象。新生代采用复制算法,老年代通常使用标记-整理或标记-压缩算法。 2. **新生代细粒度划分**: 包括Eden空间、From Survivor和To Survivor空间...