`
zhchx0827
  • 浏览: 194080 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA分代垃圾回收机制

 
阅读更多
原文网址:http://jefferent.iteye.com/blog/1123677

虚拟机中的共划分为三个代:年轻代(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的各域分配策略动态变化
分享到:
评论

相关推荐

    java高级之垃圾回收机制

    ### Java高级之垃圾回收机制详解 #### 一、引言 在现代软件开发中,Java因其平台无关性、丰富的库支持以及自动内存管理等特性,成为企业级应用开发的首选语言之一。其中,垃圾回收机制(Garbage Collection, GC)是...

    Java垃圾回收机制总结

    Java垃圾回收机制总结 Java垃圾回收机制是Java虚拟机(JVM)中的一种机制,用于防止内存泄露和有效地使用空闲的内存。垃圾回收机制的主要目的是为了回收无用的对象占用的内存空间,使该空间可被程序再次使用。 ...

    Java与C#的垃圾回收机制

    .NET Framework使用分代垃圾回收机制(Generational Garbage Collection),将托管堆划分为三个世代: - **0代(Generation 0)**:新生对象首次分配在此,回收频率最高。 - **1代(Generation 1)**:从0代存活下来的对象...

    垃圾回收机制面试题·.docx

    本文将深入探讨Java中的垃圾回收机制,包括其工作原理、常用算法以及实际应用中的注意事项。 #### 二、垃圾回收的基本概念 **1. 什么是垃圾回收** 垃圾回收(Garbage Collection, GC)是指在程序运行过程中自动...

    JAVA垃圾回收机制

    Java垃圾回收机制(GC)是Java编程语言的关键特性,它自动管理内存,释放不再使用的对象,以防止内存泄漏。GC的运作方式主要有两种策略:引用计数和对象引用遍历。 引用计数是一种简单但不完美的方法。每个对象都有...

    浅谈JAVA垃圾回收机制.pdf

    在 Java 中,垃圾回收机制主要通过标记-清除算法、复制算法、标记-整理算法、分代收集算法等来对可回收对象进行回收。其中,标记-清除算法将对象分为需要回收和不需要回收两类,然后清除需要回收的对象;复制算法将...

    Java垃圾回收机制的学习和使用

    Java垃圾回收机制是Java编程中至关重要的一部分,它自动管理内存,释放不再使用的对象,避免内存泄漏,并优化内存使用。Java虚拟机(JVM)的堆内存是存放对象的主要区域,当对象通过new等指令创建后,垃圾回收机制...

    Java与C 垃圾回收机制剖析.pdf

    Java和C++是两种广泛应用的面向对象编程语言,它们在垃圾回收机制上有着显著的差异。垃圾回收机制是自动管理程序内存的一种方式,主要目的是自动识别并释放不再使用的内存空间,防止内存泄漏。 C++语言的设计哲学...

    细述 Java垃圾回收机制→Java Garbage Collection Introduction - Android 1

    Java垃圾回收机制简介 Java垃圾回收机制是Java语言中的一种自动内存管理机制,它可以帮助程序员更好地编写Java应用程序,而不需要手动编写垃圾回收相关的代码。这篇文章将会介绍Java垃圾回收机制的基本概念和原理,...

    Java垃圾回收机制详解

    ### Java垃圾回收机制详解 #### 一、引言 在软件开发领域,特别是对于像Java这样的面向对象语言,内存管理一直是开发者关注的核心问题之一。Java的出现极大地简化了这一过程,其中最为突出的特点之一就是其内置的...

    Java垃圾回收机制

    Java垃圾回收机制是Java编程语言的关键特性之一,它自动化地管理程序运行时的内存,确保程序不会因内存泄漏而崩溃。垃圾回收(GC)的主要目标是识别并清理不再被程序中任何活动对象引用的对象,从而释放内存资源。...

    全面分析Java的垃圾回收机制

    Java的垃圾回收机制是Java虚拟机(JVM)的核心特性之一,它负责自动管理应用程序的内存,特别是对象的生命周期。垃圾回收的主要目标是回收不再被程序引用的对象所占用的内存,以便这部分空间可以被重新利用。 垃圾...

    细述 Java垃圾回收机制→How Java Garbage Collection Works- - Android 1

    Java垃圾回收机制详解 Java垃圾回收机制是Java虚拟机(JVM)中的一种自动管理内存的机制,它可以自动地将不再使用的对象从内存中回收,以释放更多的内存空间供其他对象使用。本文将详细介绍Java垃圾回收机制的工作...

    详细介绍Java垃圾回收机制

    Java垃圾回收机制是Java编程语言的关键特性,负责自动管理程序中的内存,确保程序高效、稳定地运行。在Java虚拟机(JVM)中,垃圾回收的主要任务是识别并清理不再被程序使用的对象,以避免内存泄漏。以下是关于Java...

    JVM调优总结(4)分代垃圾回收Java开发Java经验技

    本篇文章将详细讲解"JVM调优总结(4)分代垃圾回收"这一主题,旨在帮助Java开发者掌握更加高效、稳定的应用运行策略。 一、分代垃圾回收理论基础 Java的内存管理主要依靠垃圾回收机制,它自动回收不再使用的对象,...

    java垃圾回收机制1

    Java 垃圾回收机制 - 标记清除算法和分代假设 Java 垃圾回收机制是 Java 语言中的一种自动内存管理机制,旨在释放无用对象所占用的内存空间,以避免内存溢出和提高系统性能。其中,标记清除算法是 Java 垃圾回收...

    Java分代垃圾回收策略原理详解

    Java分代垃圾回收策略原理详解是Java虚拟机中的一种垃圾回收机制,根据对象的生命周期不同,采用不同的回收方式,以提高回收效率。 为什么要分代 Java分代垃圾回收策略是基于这样一个事实:不同的对象的生命周期是...

Global site tag (gtag.js) - Google Analytics