`

JVM学习笔记-分代收集器(Generational Collectors)

 
阅读更多

 

Generational Collectors

One disadvantage of simple stop and copy collectors is that all live objects must be copied at every collection. This facet of copying algorithms can be improved upon by taking into account two facts that have been empirically observed in most programs in a variety of languages:

简单的停止并拷贝收集器的缺点是,每一次收集时,所有的活动对象都必须被拷贝。大部分语言的大多数程序都有如下特点,如果我们认真考虑这些,拷贝算法的这个缺点是可以被改进的。

  1. Most objects created by most programs have very short lives.

     

  2. Most programs create some objects that have very long lifetimes.
1)        大多数程序所创建的大部分对象都只有很短的生命周期
2)        大多数程序都创建一些具有非常长生命周期的对象

A major source of inefficiency in simple copying collectors is that they spend much of their time copying the same long-lived objects again and again.

简单的拷贝收集器浪费效率的一个主要原因就是,它们每次都把这些生命周期很长的对象来回拷贝,消耗大量的时间。

 

Generational collectors address this inefficiency by grouping objects by age and garbage collecting younger objects more often than older objects. In this approach, the heap is divided into two or more sub-heaps, each of which serves one "generation" of objects. The youngest generation is garbage collected most often. As most objects are short-lived, only a small percentage of young objects are likely to survive their first collection. Once an object has survived a few garbage collections as a member of the youngest generation, the object is promoted to the next generation: it is moved to another sub-heap. Each progressively older generation is garbage collected less often than the next younger generation. As objects "mature" (survive multiple garbage collections) in their current generation, they are moved to the next older generation.

按代收集的收集器通过把对象按照寿命来分组解决这个效率低下的问题,更多的收集那些短暂出现的年幼对象,而非寿命较长的对象。在这种方法里,堆被划分为两个或者更多的子堆,每一个子堆为一“代”对象服务。最年幼的那一代进行最频繁的垃圾收集。因为大多数对象都是短促出现的,只有很小部分的年幼对象可以在它们经历第一次收集后存活。如果一个最年幼的对象经历了好几次垃圾收集后仍然存活,那么这个对象就成长为寿命更高的一代;它被转移到另外一个子堆中去。年龄更高的每一代的收集都没有年轻的那一些来的频繁。每当对象在它所属的年龄层(代)中变得成熟(逃过了多次垃圾收集)之后,它们就被转移到更高的年龄层中去。

 

 

The generational collection technique can be applied to mark and sweep algorithms as well as copying algorithms. In either case, dividing the heap into generations of objects can help improve the efficiency of the basic underlying garbage collection algorithm.

按代进行的垃圾收集除了可以应用于拷贝算法,也可以应用于标记并清楚算法。不管在哪种情况下,把堆按照对象年龄层分解都可以提高最基本的垃圾收集算法性能

 

分享到:
评论

相关推荐

    nginx-upstream-jvm-route-1.15

    【标题】"nginx-upstream-jvm-route-1.15" 涉及的核心知识点是Nginx的upstream模块与JVM路由的整合,特别针对Nginx 1.15版本。这个项目旨在解决在配置Nginx时遇到的特定错误提示“nginx: [emerg] invalid parameter ...

    基于jvm-sandbox-repeater重新开发的一款流量回放平台产品

    Moonbox(月光宝盒)是JVM-Sandbox生态下的,基于jvm-sandbox-repeater重新开发的一款流量回放平台产品。在jvm-sandbox-repeater基础上提供了更加丰富功能,同时便于线上部署和使用,更多对比参考。 使用场景 你...

    JVM调优总结 -Xms -Xmx -Xmn -Xss

    JVM 给了三种选择:串行收集器、并行收集器、并发收集器。串行收集器只适用于小数据量的情况,而并行收集器和并发收集器适用于大数据量的情况。 并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台...

    metrics-jvm-3.1.5-API文档-中文版.zip

    赠送jar包:metrics-jvm-3.1.5.jar; 赠送原API文档:metrics-jvm-3.1.5-javadoc.jar; 赠送源代码:metrics-jvm-3.1.5-sources.jar; 赠送Maven依赖信息文件:metrics-jvm-3.1.5.pom; 包含翻译后的API文档:...

    jvm 调优笔记-jvm.zip

    《JVM调优笔记》 Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码,管理内存,以及优化程序性能。JVM调优是提高Java应用程序性能的关键步骤,涉及到多个方面,包括堆内存设置、垃圾收集器选择、...

    JVM性学习笔记-基本原理,内存模型,JVM参数

    JVM性学习笔记-基本原理,内存模型,JVM参数设置,类加载器原理,JDK自带工具

    metrics-jvm-3.1.5-API文档-中英对照版.zip

    赠送jar包:metrics-jvm-3.1.5.jar; 赠送原API文档:metrics-jvm-3.1.5-javadoc.jar; 赠送源代码:metrics-jvm-3.1.5-sources.jar; 赠送Maven依赖信息文件:metrics-jvm-3.1.5.pom; 包含翻译后的API文档:...

    jvm-full-gc调优-jvm-full-gc.zip

    本资料"jvm-full-gc调优-jvm-full-gc.zip"显然是针对如何减少和优化JVM的Full GC进行深入探讨的。以下将详细介绍JVM Full GC的相关知识点。 1. **理解JVM内存结构**:Java内存主要分为堆内存(Heap)和非堆内存...

    JVM学习笔记(一)

    本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM的各种运行时信息,包括但不限于JVM进程与参数查看、垃圾收集信息、JVM锁信息等内容。 #### 二、查看JVM进程及参数 ##### 1. JPS - **用途**:列出主机上...

    Android Studio 报错failed to create jvm error code -4的解决方法

    代码如下:failed to create jvm error code -4 这一般应是内存不够用所致,解决方法参考如下。 打开 Android Studio 安装目录下的bin目录,查找并打开文件 studio.exe.vmoptions,修改代码: 代码如下:-Xmx512m 为...

    nginx-upstream-jvm-route-0.1.tar.gz

    "nginx-upstream-jvm-route-0.1.tar.gz"正是为了解决这个问题而设计的一个解决方案。 首先,让我们了解一下Nginx的Upstream模块。Upstream模块允许Nginx将接收到的请求转发到一组后端服务器,可以根据配置的策略...

    mini-jvm in rust实现jvm,jvm-rs-main.zip

    项目名为"jvm-rs-main",通过这个项目,我们可以深入学习Rust语言与JVM的交互,以及如何构建一个简化版的JVM。 一、Rust语言的魅力 Rust是一种系统级编程语言,它强调安全、并发和速度。它的内存管理模型避免了空...

    JVM学习笔记2018-4-151

    本篇JVM学习笔记主要关注对象声明、相关内存分配方法以及虚拟内存的物理和虚拟寻址概念。 首先,我们来看对象声明。在Java中,对象是在堆上创建的。例如,`CHeapObj` 类展示了如何在C++中模拟Java对象在堆上的分配...

    nginx-upstream-jvm-route-1.12.0.tar.gz

    nginx_upstream_jvm_route 是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。 安装方法(进入Nginx源码目录): #patch -p0 < /path/to/this/directory/jvm_route.patch # ./configure -...

    java之jvm学习笔记十一(访问控制器)-源码

    本文将深入探讨JVM中的访问控制器,主要基于“java之jvm学习笔记十一(访问控制器)-源码”这一主题,以及相关的源码分析。 首先,我们得了解Java的安全模型。Java安全模型基于一种称为安全管理器(SecurityManager)...

    JVM-MANAGEMENT-MIB,jvm mib库

    JVM,MIB,可通过SNMP协议监控JVM运行情况

    jvm调优学习-optimizeJVM.zip

    "jvm调优学习-optimizeJVM.zip" 文件可能包含了一系列关于JVM调优的学习资料,特别是"optimizeJVM-develop"这个子文件可能涵盖了开发阶段的JVM优化实践。 1. **JVM架构** - 类加载器:负责加载类文件,包括启动类...

    Jvm调优练习-jvm-tuning.zip

    【描述】"Jvm调优练习-jvm-tuning" 暗示了这个压缩包可能包含一系列实验或教程,帮助用户通过实际操作学习如何调整JVM的配置。这可能包括设置不同的JVM参数,分析性能指标,以及理解不同参数对程序运行效率的影响。 ...

    jvm性能调优-垃圾收集器parnew&CMS底层三色标记算-performance-gc-parnew-cms.zip

    本文将深入探讨两个重要的垃圾收集器——ParNew和Concurrent Mark Sweep (CMS) ——以及它们在JVM性能调优中的作用,特别是基于三色标记算法的实现。 首先,ParNew垃圾收集器是新生代(Young Generation)的默认...

    Jvm性能优化-JVM内存结构原理分析03

    Jvm中有多种垃圾收集器,如串行(Serial)垃圾收集器、并行(Parallel)垃圾收集器、并发(Concurrent)垃圾收集器等。其中,串行垃圾收集器是Jvm默认的垃圾收集器,它使用单线程来执行垃圾回收。并行垃圾收集器使用...

Global site tag (gtag.js) - Google Analytics