`

JVM调优总结(五)分代垃圾回收详述

    博客分类:
  • JVM
jvm 
阅读更多
   为什么要分代
分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式 ,以便提高回收效率。
   在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接, 这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短 ,比如:String对象,由于其不变类的特性,系统会产生大量的这些对象,有些对象甚至只用一次即可回收。
   试想,在不进行对象存活时间区分的情况下,每次垃圾回收都是对整个堆空间进行回收,花费时间相对会长,同时,因为每次回收都需 要遍历所有存活对象,但实际上,对于生命周期长的对象而言,这种遍历是没有效果的,因为可能进行了很多次遍历,但是他们依旧存在。 因此,分代垃圾回收采用分治的思想,进行代的划分,把不同生命周期的对象放在不同代上,不同代上采用最适合它的垃圾回收方式进行回 收。
如何分代
如图所示:



  虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(Old Generation)和持久代(Permanent Generation)。其中持 久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。
年轻代:
   所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区。一个Eden 区,两个 Survivor区(一般而言)。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个), 当这个 Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过 来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能 同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor去过来的对象。而且, Survivor区总有一个是空的。同时,根据程序需要,Survivor区是可以配置为多个的(多于两个),这样可以增加对象在年轻代中的存在时 间,减少被放到年老代的可能。

年老代:
在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象 。
持久代:
用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如 Hibernate 等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过- XX:MaxPermSize=<N>进行设置。
什么情况下触发垃圾回收
由于对象进行了分代处理,因此垃圾回收区域、时间也不一样。GC有两种类型:Scavenge GC和Full GC。
Scavenge GC
一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,对Eden区域进行GC,清除非存活对象,并且把尚且存 活的对象移动到Survivor区。然后整理Survivor的两个区。这种方式的GC是对年轻代的Eden区进行,不会影响到年老代。因为大部分对象都 是从Eden区开始的,同时Eden区不会分配的很大,所以Eden区的GC会频繁进行。因而,一般在这里需要使用速度快、效率高的算法,使Eden 去能尽快空闲出来。
Full GC
对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个对进行回收,所以比Scavenge GC要慢,因此应该尽可能减少 Full GC的次数。在对JVM调优的过程中,很大一部分工作就是对于FullGC的调节。有如下原因可能导致Full GC:
  • · 年老代(Tenured)被写满
  • · 持久代(Perm)被写满
  • · System.gc()被显示调用
  • ·上一次GC之后Heap的各域分配策略动态变化
  • 大小: 33 KB
分享到:
评论

相关推荐

    JVM调优总结(六)-分代垃圾回收详述2[归纳].pdf

    本文将深入探讨分代垃圾回收机制,这是一种有效的内存管理策略,它将堆内存分为年轻代(Young Generation)、老年代(Tenured Generation)和持久代(Permanent Generation),针对不同生命周期的对象采取不同的回收...

    java虚拟机_JVM高级特性与实践最新版

    - 垃圾收集:详述了垃圾收集的基本原理、算法(如标记-清除、复制、标记-整理、分代收集等)以及GC调优策略。 - 内存分配与回收:讨论了对象在堆中的分配、存活判断和内存回收策略。 - 堆内存优化:如何通过调整...

    金蝶Apusic应用服务器 V10企业版 用户手册+技术白皮书+调优手册

    2. **JVM参数调优**:指导如何设置JVM堆大小、垃圾回收策略等,以减少性能瓶颈。 3. **网络配置**:包括连接池配置、超时设置等,以提升网络通信效率。 4. **日志和监控**:建议合理的日志级别和监控策略,便于实时...

    java深度历险+深入java虚拟机

    8. **垃圾回收机制**:Java的自动内存管理是通过垃圾回收实现的,书中会解释垃圾回收的工作原理、各种GC算法及其调优策略。 《深入Java虚拟机》则专注于JVM内部机制,主要包括: 1. **JVM架构**:详述JVM的整体...

    java软件技术文档 PDF

    11. **JVM优化**:探讨JVM调优技术,如堆内存设置、GC调优、JDK监控工具的使用。 12. **Java 8及以上版本新特性**:包括Lambda表达式、Stream API、Optional类、日期时间API的改进等。 此外,文档还可能包含实际...

    Java面试题大全_300个以上面试题加答案_最后附加例子

    - 讨论JVM调优的基本思路,如JVM参数设置、性能监控工具的使用。 - 分析垃圾回收器的选型和配置,如CMS、G1、ZGC等。 - 阐述类加载机制,包括双亲委派模型和自定义类加载器。 9. **设计模式**: - 解释常见的...

    Java高级程序员(10年左右)面试题目集

    6. **JVM调优**: - 了解JVM参数,如-Xms, -Xmx, -XX:MaxHeapSize, -XX:NewRatio等的含义及作用。 - 分析和优化JVM性能,包括内存设置、GC调整、类加载器优化等。 7. **Spring框架**: - 描述Spring的核心模块,...

    JavaGuide-master

    - **JVM调优**:了解垃圾收集器、内存配置以及性能监控工具,提升系统性能。 - **设计模式**:介绍常见的23种设计模式及其在Java中的应用,如单例、工厂、装饰器模式等。 - **数据结构与算法**:重点讲解在Java中...

    java问题定位技术+性能优化

    - JVM通过不同的垃圾回收算法(如标记-清除、复制算法)来管理堆内存。 - **3.1.4 如何告诉虚拟机不再需要这块内存?** - 将引用设为`null`,让对象变为不可达,从而被垃圾回收。 - **3.1.5 将对象设为null就可以避免...

    Java Performance Tuning

    2. **JVM配置**:详述如何设置JVM启动参数以改善内存分配、垃圾回收策略等。 3. **性能分析工具**:介绍如VisualVM、JProfiler等工具的使用,帮助读者诊断和定位问题。 4. **代码优化**:讲解如何编写高效、无副作用...

    程序员面试宝典の3,Java面试宝典Alpha4.0.zip

    1. **JVM调优**:分析JVM的性能监控工具,如JConsole、VisualVM等,以及调优策略。 2. **Spring框架**:讲解Spring的核心特性,如依赖注入、AOP(面向切面编程)、Spring Boot和Spring Cloud的应用。 3. **数据库...

    java-mianshiti.zip_java简历

    4. 常见的JVM调优参数。 十、设计模式 设计模式是软件开发的最佳实践: 1. 介绍单例模式、工厂模式和观察者模式。 2. 在实际项目中如何应用设计模式? 准备这些面试题的同时,不要忘记在简历中突出自己的项目经验...

    薪资20Kjava工程师简历模板

    8. **JVM**:精通JVM调优,了解内存模型和垃圾回收机制。 9. **数据库技术**:熟练使用MySQL,擅长索引优化、主从复制和数据恢复。 **业务理解与管理** 1. **业务思维**:具备一定的业务分析和设计能力,能将企业...

    Java宝典(第一版)

    ### Java宝典(第一版)知识点详述 #### 前言:聚焦Java核心知识点 本书《Java宝典》旨在帮助读者深入理解Java的核心技术,包括JVM、类加载机制、多线程处理、网络编程、非阻塞I/O(NIO)、性能优化以及安全等方面。...

    java 开发手册 泰山版.zip

    9. **JVM优化**:分析垃圾回收机制、内存模型、类加载机制,提供JVM调优策略。 10. **设计模式**:介绍常见的设计模式,如工厂模式、单例模式、观察者模式等,帮助开发者解决常见问题。 11. **Spring框架**:涵盖...

    狂神说全部笔记内容.zip

    7. **JVM调优**:分析JVM内存结构,了解GC算法,进行性能监控与调优。 8. **Java 8新特性**:Lambda表达式、函数式接口、Stream API、日期时间API等。 9. **微服务架构**:Docker容器化、服务发现、熔断、限流等...

    Java核心技术 PDF(文字版 有目录 可以复制粘贴文字)

    15. **Java虚拟机(JVM)**:简述JVM的工作原理,类加载过程,以及如何通过JVM调优提升程序性能。 以上知识点构成了Java编程的基石,掌握它们对于成为一名优秀的Java开发者至关重要。通过阅读这本书,你可以系统地...

Global site tag (gtag.js) - Google Analytics