`
Rempor
  • 浏览: 13616 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JVM理论学习二

    博客分类:
  • Java
 
阅读更多

 

收集器设置

 Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:

图中如果两个垃圾收集器直接有连线,则表明这两个垃圾收集器可以搭配使用。
 

年轻代

串行收集器:-XX:+UseSerialGC 采用复制算法,Serial垃圾收集器依然是java虚拟机运行在Client模式下默认的新生代垃圾收集器。

 

并行收集器:-XX:+UseParNewGC 采用复制算法,打开此开关参数后,使用ParNew+Serial Old收集器组合进行垃圾收集。ParNew收集器默认开启和CPU数目相同的线程数,可以通过-XX:ParallelGCThreads参数来限制垃圾收集器的线程数。

 

并行收集器(吞吐量优先)-XX:+UseParallelGC  采用复制算法,提供一个参数:-XX:+UseAdaptiveSizePolicy,动态配置年轻代大小。

 

年老代

串行Serial Old收集器:通过配置新生代的参数配置,使用标记-整理算法,这个收集器也主要是运行在Client默认的java虚拟机默认的年老代垃圾收集器。在Server模式下,主要有两个用途:

    a.在JDK1.5之前版本中与新生代的Parallel Scavenge收集器搭配使用。

    b.作为年老代中使用CMS收集器的后备垃圾收集方案?

 

并行Parallel Old收集器(吞吐量优先):-XX:+UseParallelOldGC:,Parallel Old收集器是Parallel Scavenge的年老代版本,使用多线程的标记-整理算法,在JDK1.6才开始提供。

 

并发Concurrent mark sweep(CMS)收集器:-XX:+UseConcMarkSweepGC,其最主要目标是获取最短垃圾回收停顿时间,和其他年老代使用标记-整理算法不同,它使用多线程的标记-清除算法。

 

年轻代和年老代将根据默认的比例(1:2)分配堆内存

  • 更大的年轻代必然导致更小的年老代,大的年轻代会延长普通GC的周期,但会增加每次GC的时间;小的年老代会导致更频繁的Full GC
  • 更小的年轻代必然导致更大年老代,小的年轻代会导致普通GC很频繁,但每次的GC时间会更短;大的年老代会减少Full GC的频率

 

系统默认收集器

默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行判断。

client模式

年轻代使用Serial垃圾收集器,年老代使用Serial Old收集器,都是串行收集器。

 

server模式

年轻代使用ParNew垃圾收集器,年老代使用Serial Old收集器。

 

GC简单介绍

普通GC(minor/Scavenge GC):只针对新生代区域的GC

全局GC(Full GC):针对所有分代区域(新生代、年老代、永久代)的GC

触发FULL GC条件:

1.system.gc(); 

2.旧生代空间不足 

3. Permanet Generation空间满 

4. CMS GC时出现promotion failed和concurrent mode failure 

promotion failed是在进行Minor GC时,survivor space放不下、对象只能放入旧生代,而此时旧生代也放不下造成的;concurrent mode failure是在执行CMS GC的过程中同时有对象要放入旧生代,而此时旧生代空间不足造成的。 

5.统计得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间。 在进行Minor GC时,做了一个判断,如果之前统计所得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间,那么就直接触发Full GC。

 

收集规则举例:

规则一:通常情况下,对象在eden中分配。当eden无法分配时,触发一次Minor GC。

规则二:配置了PretenureSizeThreshold的情况下,对象大于设置值将直接在老年代分配。

规则三:在eden经过GC后存活,并且survivor能容纳的对象,将移动到survivor空间内,如果对象在survivor中继续熬过若干次回收(默认为15次)将会被移动到老年代中。回收次数由MaxTenuringThreshold设置。

规则四:如果在survivor空间中相同年龄所有对象大小的累计值大于survivor空间的一半,大于或等于个年龄的对象就可以直接进入老年代,无需达到MaxTenuringThreshold中要求的年龄。

规则五:在Minor GC触发时,会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间,如果大于,改为直接进行一次Full GC,如果小于则查看HandlePromotionFailure设置看看是否允许担保失败,如果允许,那仍然进行Minor GC,如果不允许,则也要改为进行一次Full GC。

 

  • 大小: 68.4 KB
分享到:
评论

相关推荐

    JVM学习资料+笔记

    这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...

    jdk,jvm源码

    个人网站可能提供了一些关于JVM源码分析的教程和资源,对于深入学习JVM的运行机制,这是一个很好的参考资料。通过结合理论知识与实际源码阅读,可以更好地掌握Java编程的精髓,提高解决复杂问题的能力。

    jvm视频及笔记

    Java虚拟机(JVM)是Java程序运行的核心组件,它负责解释和执行字节码,为开发者...理论学习后,实践操作是巩固知识的关键,尝试在实际项目中应用这些知识,解决性能问题,优化JVM配置,将使你对JVM的理解更加深入。

    jvm_code深入理解.zip

    这本书的第二版更是加入了更多最新的JVM特性,使得学习内容更加全面且贴近实际。配套的源代码提供了丰富的实践机会,让理论知识与实战结合,使学习更加有效。 首先,我们要了解JVM(Java Virtual Machine)是Java...

    jvm视频教程2020最新.rar

    通过这套2020年最新的JVM视频教程,学员不仅能掌握JVM的基础理论,还能提升实战技能,为解决实际工作中遇到的JVM问题提供强大的理论支持。配合源码学习,效果更佳,让学习者能够快速上手,应对各种复杂的JVM挑战。

    狂神说JVM探究.rar

    【狂神说JVM探究】是一份集合了多种格式的学习资料,主要涵盖了Java虚拟机(JVM)的基础知识。这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键...

    JVM调优视频理论及工具

    通过学习JVM调优视频理论及工具,开发者可以深入理解JVM的工作原理,从而有效地解决性能问题,提升Java应用的整体性能。同时,了解和掌握这些工具能帮助开发者更好地定位和解决问题,实现系统的稳定高效运行。

    JVM内存管理白皮书

    它不仅向读者提供了JVM垃圾收集机制的理论知识,还提供了实操指导,比如如何选择和调优垃圾收集器以及使用哪些工具来评估垃圾收集器性能。对于开发人员来说,掌握这些知识可以帮助他们编写出性能更优、稳定性更高的...

    JVM规范与深入理解

    书中的内容不仅包括理论知识,还有丰富的实践案例,帮助读者将理论与实际相结合,提升对JVM的理解。特别是对于内存模型的讲解,如堆内存、栈内存、方法区以及本地方法栈的运作机制,这些内容对于理解Java程序的运行...

    JVM Diagnostics Guide 1.4.2

    2. **内存模型**:详细讲解JVM内存结构,如堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、本地方法栈(Native Method Stack)和程序计数器(PC Register)等,以及它们各自的作用和相互关系。...

    深入Java虚拟机 JVM pdf

    这本书的第二版更是加入了更多现代JVM的新特性,使其成为Java开发者深入学习JVM的权威指南。 在JVM的世界里,了解内存管理是关键。书中详细介绍了JVM的内存区域,包括堆、栈、方法区、程序计数器、本地方法栈等。堆...

    jvm调优学习

    ### JVM调优学习知识点 #### 一、JVM堆大小设置 JVM堆大小的设置是JVM调优中的一个重要环节,它直接影响到程序运行时的性能表现。具体来说,JVM的最大堆大小受到以下几个方面的限制: 1. **操作系统的数据模型**:...

    jvm和gc详解及调优

    2. **内存模型**:JVM的内存分为堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈(Native Method Stack)。书中会详细解析各区域的功能、分配规则以及它们之间的...

    理论与实践结合 解密JVM-day01.rar

    二、JVM结构 JVM主要由以下几个部分构成: 1. 类加载器:负责加载类文件到JVM内存中。 2. 运行时数据区:包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 3. 执行引擎:解释器或即时编译器,负责执行字节码。 4...

    JVM调优实战.doc

    《JVM调优实战》是一份深入探讨Java虚拟机(JVM)性能优化的文档,主要分为理论篇和实战篇两大部分。...通过理论学习和实战演练,开发者可以更好地理解和优化JVM,从而提升应用程序的稳定性和效率。

    JVM系列之性能调优参考手册(实践篇).pdf

    2. 非标准参数:以“-X”开头,提供给JVM实现特定的功能,但这些功能并非所有JVM都支持,可能在不同版本间也有变化。非标准参数通常用于更精细的控制,比如“-Xint”强制解释执行、“-Xcomp”强制编译执行等。 3. ...

    从 0 开始带你成为JVM实战高手.txt

    从零开始学习并掌握Java虚拟机(JVM)...通过以上几个方面的详细介绍,我们可以看到JVM的学习不仅涉及到理论知识的理解,更重要的是能够结合实际场景进行实践操作。希望本文能帮助你从0开始逐步成长为一名JVM实战高手。

    R大(国内JVM权威)资料合集

    - **《The Garbage Collection Handbook》**: 本书深入探讨了垃圾收集的理论与实践,覆盖了不同的算法和技术,是理解和实现高效内存管理的重要参考。 - **《ガベージコレクションのアルゴリズムと実装》/《垃圾回收...

Global site tag (gtag.js) - Google Analytics