JVM(9)之 年轻代收集器】的更多相关文章

开发十年,就只剩下这套架构体系了! >>>   继续上一篇博文所讲的,STW即GC时候的停顿时间,他会暂停我们程序中的所有线程.如果STW所用的时间长而且次数多的话,那么我们整个系统稳定性以及可用性将大大降低.    因此我们在必要的时候需要对虚拟机进行调优,调优的主要目标之一就是降低STW的时间,也就是减少Full GC的次数.那么这里我们从调优的角度来分析各个收集器的优势与不足.    首先从作用于年轻代的收集器开始(采用复制的收集算法): Serial收集器:一个单线程收集器,在进…
JAVA 年轻代收集器  第九节 继续上一章所讲的,STW即GC时候的停顿时间,他会暂停我们程序中的所有线程.如果STW所用的时间长而且次数多的话,那么我们整个系统稳定性以及可用性将大大降低. 因此我们在必要的时候需要对虚拟机进行调优,那么调优的主要目标之一就是降低STW的时间,也就是减少Full GC的次数.那么这里我们从调优的角度来分析各个收集器的优势与不足. 首先从作用于年轻代的收集器开始(采用复制的收集算法): Serial收集器:一个单线程收集器,在进行回收的时候,必须暂停其他所有的工…
开发十年,就只剩下这套架构体系了! >>>   在上一篇博文我们介绍了JAVA新生代收集器,本篇博文我们要讲的就是关于老年代的一些收集器.老年代存活的一般是大对象以及生命很顽强的对象,因此新生代的复制算法很明显不能适应该区域的特性,所以老年代采用的是"标记-清除-整理"算法(以前的博文有详细讨论过). Serila Old收集器:该收集器是Serial收集器的老年代版,同样是一个单线程的收集器,优劣势和Serial收集器一样,这里就不多说了. Parallel Old…
参考文章: 1.Java 新生代.老年代.持久代.元空间 2.Java内存与垃圾回收调优 3.方法区的Class信息,又称为永久代,是否属于Java堆? Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象,如下图所示: 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old).新生代 ( Young ) 又被划分为三个区域:Eden.S0.S1. 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及…
JAVA 年老代收集器 第10节 上一章我们讲了新生代的收集器,那么这一章我们要讲的就是关于老年代的一些收集器.老年代的存活的一般是大对象以及生命很顽强的对象,因此新生代的复制算法很明显不能适应该区域的特性,所以老年代采用的是“标记-清除-整理”算法(以前的章节有详细讨论过). SerilalOld收集器:该收集器是Serial收集器的老年代版,同样是一个单线程的收集器,优劣势和Serial收集器一样,这里就不多说了. Parallel Old收集器:在我们之前文章的代码例子中默认的年老代收集器…
关键字约定 Young generation –>新生代 Tenured / Old Generation –>老年代 Perm Area –>永久代 年轻代: 所有新生成的对象首先都是放在年轻代的.年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象.年轻代分三个区.一个Eden区,两个 Survivor区(一般而言).大部分对象在Eden区中生成.当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个 Survivor区满时,此区的存活对象将被复制到另外…
  关键字约定 Young generation –>新生代 Tenured / Old Generation –>老年代 Perm Area –>永久代 年轻代: 所有新生成的对象首先都是放在年轻代的.年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象.年轻代分三个区.一个Eden区,两个 Survivor区(一般而言).大部分对象在Eden区中生成.当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个 Survivor区满时,此区的存活对象将被复制到…
虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Generation)和持久代(Permanent Generation).其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大.年轻代和年老代的划分是对垃圾收集影响比较大的. 年轻代: 所有新生成的对象首先都是放在年轻代的.年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象.年轻代分三个区.一个Eden区,两个Survivor区(一般而言).大部分对象在Eden区中生成.当Ed…
贴个图 Serial收集器 最简单的收集器,单线程,收集器会暂停用户线程,称为"stop the world". ParNew收集器 Serial收集器的多线程版本,其它类似.默认线程数为CPU线程数,通过-XX:ParallelGCThreads=? 可以指定线程数 Parallel Scavenge收集器 复制算法,多线程收集器.与ParNew的区别在于,该收集器关注系统吞吐量(吞吐量=用户运行时间/(用户运行时间+垃圾回收时间)).通过-XX:MaxGCPauseMillis 设…
从前文JVM垃圾回收几种常见算法和常见收集器我们知道,CMS是老年代垃圾收集器.CMS 收集器主要关注系统停顿时间.CMS 是 Concurrent Mark Sweep 的缩写,意为并发标记清除,从名称上可以得知,它使用的是标记-清除算法,同时它又是一个使用多线程并发回收的垃圾收集器.它可以与Serial收集器和parNew收集器搭配使用.     CMS工作时,主要步骤有:初始标记.并发标记.重新标记.并发清除和并发重置.其中初始标记和重新标记是独占系统资源的,而并发标记.并发清除和并发重置…
分代收集算法(Generational Collection): 当前商业虚拟机的垃圾收集都采用"分代收集算法". 这种算法并没有什么新的思想,只是根据对象存活周期的不同将内存划分为几块,  一般是将Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法. 在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用"复制算法",只需要付出少量存活对象的复制成本就可以完成收集. 在老年代中,因为对象存活率高.没有额外空间对它进行分配…
一.前言 前文学习了各种GC回收算法,掌握了GC回收的原理,但是真正的GC实现却尤为复杂,本篇文章将主要介绍各种GC收集器. 目前主流的HotSpot VM支持多种虚拟机,这些虚拟机也体现了GC的发展历程,从单线程GC到多线程GC,分代GC到G1 GC. 本文主要从以下几个方面介绍GC收集器: 各种GC的特点 GC匹配和参数使用 GC日志格式 常用的GC参数总结 二.各种GC的特点 HotSpot中采用分代GC,从早期的单线程串行Garbage Collector到后面的多线程并行Garbage…
1. 前言 在上一篇文章中,介绍了JVM中垃圾回收的原理和算法.介绍了通过引用计数和对象可达性分析的算法来筛选出已经没有使用的对象,然后介绍了垃圾收集器中使用的三种收集算法:标记-清除.标记-整理.标记-复制算法. 介绍完原理,在这篇文章中,我们将介绍当前JVM中已经实现的垃圾收集器,以及与收集器主题相关的一些内容. 首先,我们将在上一篇文章中提到分代收集机制的基础上,介绍下现代商业JVM中普遍采用的分代回收策略.然后,按照内存分代划分的维度介绍下当前JVM中实现的收集器.最后,学习分析不同收集…
1. 前言 在上一篇文章中,介绍了JVM中垃圾回收的原理和算法.介绍了通过引用计数和对象可达性分析的算法来筛选出已经没有使用的对象,然后介绍了垃圾收集器中使用的三种收集算法:标记-清除.标记-整理.标记-复制算法. 介绍完原理,在这篇文章中,我们将介绍当前JVM中已经实现的垃圾收集器,以及与收集器主题相关的一些内容. 首先,我们将在上一篇文章中提到分代收集机制的基础上,介绍下现代商业JVM中普遍采用的分代回收策略.然后,按照内存分代划分的维度介绍下当前JVM中实现的收集器.最后,学习分析不同收集…
HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间.该目标对于大多数交互式应用很重要,比如web应用.在我们看一下有关JVM的参数之前,让我们简要回顾CMS收集器的操作和使用它时可能出现的主要挑战. 就像吞吐量收集器(参见本系列的第6部分),CMS收集器处理老年代的对象,然而其操作要复杂得多.吞吐量收集器总是暂停应用程序线程,并且可能是相当长的一段时间,然而这能够使该算法安全地忽略应用程序.相比之下,CMS收集器被设计成在大多数时间能与应用程序线程并行执行,…
(转自:http://my.oschina.net/u/436879/blog/85478) 在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里,我们从JVM的内存管理原理的角度来认识Stack和Heap,并通过这些原理认清Java中静态方法和静态属性的问题. 一般,JVM的内存分为两部分:Stack和Heap. Stack(栈)是JVM的内存指令区.Stack管理很简单,push一定长度字节的数据或者指令,Stack指针压栈相应的字节位移:pop一定字节长度数据或者指令,St…
此篇文章半原创是对参考资料中的知识点进行总结,欢迎评论指点,谢谢!        部分知识点总结来自R大的帖子,下文有参考资料的链接 概述 G1 收集是相比于其他收集器(可见 上一篇文章),可以独立运行,同时做到了并发和并行.下面看一下它是如何实现的. 之前介绍的几组垃圾收集器组合,都有几个共同点: 年轻代.老年代是独立且连续的内存块: 年轻代收集使用单eden.双survivor进行复制算法: 老年代收集必须扫描整个老年代区域: 都是以尽可能少而块地执行GC为设计原则. G1垃圾收集器也是以关…
Garbage-First,面向服务端的垃圾收集器. 并行与并发:充分利用多核环境减少停顿时间, 分代收集:不需要配合其它收集器 空间整合:整体上看属于标记整理算法,局部(region之间)数据复制算法,运作期间不会产生空间碎片 停顿可预测,建立可以预测的停顿时间模型. 内存管理: 将整个java堆划分为多个大小形同的区域region,新生代和老年代都是region的集合.可以有计划的避免在全区域内进行垃圾收集. 回收方式:跟踪每一个region里面的垃圾堆积的价值大小(回收所得的空间大小以及所…
一.概述 1.1.图解 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. JVM给出了3类选择:串行收集器.并行收集器.并发收集器.串行收集器只适用于小数据量的情况,所以生产环境的选择主要是并行收集器和并发收集器. 默认情况下JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数.JDK5.0以后,JVM会根据当前系统配置进行智能判断. 1.2.按类解说 串行收集器 -XX:+UseSerialGC…
以下配置主要针对分代垃圾回收算法而言. 一.堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作系统对内存无限制.在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m. 典型设置: java -Xmx3550m -Xms3550m -Xmn2g –Xss128k -Xmx35…
Java自动垃圾回收(Automatic Garbage Collection)是自动回收堆上不再使用的内存,new的对象在程序中没有引用指向它,就会被回收.回收的实现很多,有Reference Counting Collector/Tracing Collector/Compacting Collector/Coping Collector/Generational Collector/Adaptive Collector.本文记录的是HotSpot Java VM采用的Generationa…
根据Java GC收集器具体分类,我们可以看出JVM根据需求不同提供了三种选择:串行收集器.并行收集器.并发收集器. 串行收集器只适用于小数据量的情况,我们主要了解一下并行收集器和并发收集器.默认情况下,JDK5.0以前都是使用串行收集器,如果需要使用其他收集器需要在启动的是时候加入相应的参数.JDK5.0以后,JVM会根据当前系统的配置进行判断. 我们先了解一下什么是并行和并发? 并行:指多条垃圾收集器线程并行工作,但此时仍是“Stop The World”状态,即用户线程处于等待状态: 并发…
G1收集器-原创译文 原文地址 Getting Started with the G1 Garbage Collector 目的 本文介绍了如何使用G1垃圾收集器以及如何与Hotspot JVM一起使用的基础知识.您将了解G1收集器在内部的功能,使用G1的关键配置,以及G1收集器的操作日志选项. 简介 本文涵盖了Java虚拟机(JVM)G1垃圾收集(GC)的基础知识.在本文的第一部分中,提供了JVM的概述以及垃圾收集和性能的介绍.接下来的读者将复习有关CMS收集如何在Hotspot JVM工作的…
G1收集器的收集原理 来源 http://blog.jobbole.com/109170/ JVM 8 内存模型 原文:https://blog.csdn.net/bruce128/article/details/79357870 这里介绍的是JDK1.8 JVM运行时内存数据区域划分.1.8同1.7比,最大的差别就是:元数据区取代了永久代.元空间的本质和永久代类似,都是对JVM规范中方法区的实现.不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存. 二.各区域介绍…
转载:https://blog.csdn.net/zhou2s_101216/article/details/79202893 http://blog.jobbole.com/109170/ https://my.oschina.net/robinyao/blog/983822 https://blog.csdn.net/coderlius/article/details/79272773 http://www.cnblogs.com/aspirant/p/8663872.html https:…
HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间.该目标对于大多数交互式应用很重要,比如web应用.在我们看一下有关JVM的参数之前,让我们简要回顾CMS收集器的操作和使用它时可能出现的主要挑战. CMS收集器有3种基本的操作,分别是: CMS收集器会对新生代的对象进行回收(所有的应用线程都会被暂停): CMS收集器会启动一个并发的线程对老年代空间的垃圾进行回收: 默认情况下CMS不会对永久代进行垃圾回收,如果有必要,CMS会发起Full GC. 就像吞吐…
jvm中的年轻代 老年代 持久代 gc   虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Generation)和持久代(Permanent Generation).其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大.年轻代和年老代的划分是对垃圾收集影响比较大的. 年轻代: 所有新生成的对象首先都是放在年轻代的.年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象.年轻代分三个区.一个Eden区,两个Survivor区(一般…
不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内存而言的. 垃圾回收算法过程 在Java语言中,GC(Garbage Collection)是一个非常重要的概念.它主要是回收程序中不再使用的内存. 对对象而言,如果没有任何变量去引用它,那么该对象将不可能被程序访问,因此可以认为它是垃圾信息,可被回收.只要有一个以上的变量引用该对象,该对象就不会被…
新生代收集器 Serial New 单线程收集器,工作时必须暂停其他线程: 简单高效,没有线程交互开销: 基于复制算法: Parallel New 对Serial的改进,多线程: CPU数量<4时,性能并不比Serial好: CMS新生代的默认收集器: 基于复制算法: Parallel Scavenge 复制算法: 更关注吞吐量,吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间): 不能和CMS配合工作 老年代收集器 Serial Old 标记-整理算法 单线程,性能不行:…
在实践中我们发现对于大多数的应用领域,评估一个垃圾收集(GC)算法如何根据如下两个标准: 吞吐量越高算法越好 暂停时间越短算法越好 首先让我们来明确垃圾收集(GC)中的两个术语:吞吐量(throughput)和暂停时间(pause times). JVM在专门的线程(GC threads)中执行GC. 只要GC线程是活动的,它们将与应用程序线程(application threads)争用当前可用CPU的时钟周期. 简单点来说,吞吐量是指应用程序线程用时占程序总用时的比例. 例如,吞吐量99/1…