`
no7beckham
  • 浏览: 97211 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

垃圾回收机制的总结

    博客分类:
  • JAVA
阅读更多

HOTSPOT JVM内存模型图



Java Heap 分为三个主要的域:新域(Young/New)、旧域(Old)以及永久域(Permanent)。JVM生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后,便获得使用期并进入旧域。在永久 域中JVM则存储class和method对象。就配置而言,永久域是一个独立域并且不认为是堆的一部分。

用-Xms和-Xmx 控制整个堆(Young+Old)的原始大小或最大值。
  
下面的命令是把初始大小设置为128M,最大值设置为256M:
  
java –Xms128m –Xmx256m

用-XX:NewRatio设置新域(Young)在堆中所占的比例。

下面的命令把整个堆设置成128m,新域比率设置成3,即新域与旧域比例为1:3,新域为堆的1/4或32M:
  
java –Xms128m –Xmx128m –XX:NewRatio =3

或者直接设置新域(Young)的大小,
下面的命令把新域的大小设置成64m:
  
java –Xms256m –Xmx256m –Xmn64m

此时旧域的大小为256m-64m=192m

永久域默认大小为4m。运行程序时,jvm会调整永久域的大小以满足需要。每次调整时,jvm会对堆进行一次完全的垃圾收集。
  
使 用-XX:MaxPerSize标志来增加永久域搭大小。在WebLogic Server应用程序加载较多类时,经常需要增加永久域的最大值。当jvm加载类时,永久域中的对象急剧增加,从而使jvm不断调整永久域大小。为了避免 调整,可使用-XX:PerSize标志设置初始值。
  
下面命令把永久域初始值设置成32m,最大值设置成64m。
  
java -Xms512m -Xmx512m -Xmn128m -XX:PermSize=32m -XX:MaxPermSize=64m

新域分为三部分,第一部分为Eden,用于生成新的对象,剩下两部分为两个Survivor Spaces(from,to), 用来存放每次垃圾回收后存活下来的对象。新域中使用复制收集器,当Eden 充满时,收集器停止应用程序,把所有活动对象复制到当前的from Survivor Space, 当from Survivor Space充满时,收集器则把活动对象复制到当前的to Survivor Space。From和to Space可以互换角色。活动的对象将在Survivor Space不断复制,直到它们被转入旧域。

用-XX:SurvivorRatio可以设置Survivor与Eden空间的比值
以下命令把新域设置成64m,Eden占32m,每个救助域各占16m
java -Xms256m -Xmx256m -Xmn64m -XX:SurvivorRation =2

当两个Survivor Spaces(from,to)都满了,剩下的活动对象也会被转入旧域。如果想让活动对象不经过Survivor Spaces,直接进入旧域,可以把-XX:MaxTenuringThreshold设置为0,并把-XX:SurvivorRatio设置成一个大值(比如10000或者更大)以最大化Eden空间。

本文参考并转载了以下文章的内容
http://info.52z.com/html/28809.html
http://gzcj.iteye.com/blog/289062
http://java.chinaitlab.com/Jvm/36987.html

 

分享到:
评论

相关推荐

    Java垃圾回收机制总结

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

    jvm垃圾回收机制总结

    总结,理解JVM的垃圾回收机制对于优化Java应用程序的性能至关重要。开发者应根据应用的特性和需求,选择合适的垃圾回收器,并通过调整相关参数,以达到最佳的系统性能。同时,编写代码时也要遵循良好的内存管理实践...

    java高级之垃圾回收机制

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

    Java垃圾回收机制

    Java垃圾回收机制的详细介绍,调理比较清晰,个人进行的总结。

    Java与C#的垃圾回收机制

    ### Java与C#的垃圾回收机制 #### 一、引言 在现代编程语言中,内存管理是一项重要的功能,能够显著提升程序的稳定性和效率。本文将深入对比Java与C#这两种广泛使用的编程语言中的垃圾回收机制,帮助开发者更好地...

    JVM垃圾回收机制.xmind

    自己学习总结JVM垃圾回收机制的结构图,一起分享!!!

    c#的GC垃圾回收机制详细讲解文档

    总结起来,C#的垃圾回收机制为我们提供了一种方便的方式来管理内存,但同时也需要对非托管资源的管理有所了解。正确地使用`using`、`Dispose`和析构函数是确保非托管资源得到适当释放的关键。理解GC的工作原理和限制...

    简单讲解Lua中的垃圾回收机制

    ### Lua中的垃圾回收机制详解 #### 一、引言 Lua是一种轻量级且高效的脚本语言,在游戏开发、Web 应用、自动化脚本等领域有着广泛的应用。其中一个重要的特性便是其内置的自动垃圾回收机制,它使得程序员不必手动...

    JVM的工作原理及垃圾回收机制介绍

    ### JVM工作原理及垃圾回收机制详解 #### 一、JVM概述及原理 **1.1 JVM概述** Java Virtual Machine (JVM),即Java虚拟机,是一种虚构的计算机,在实际的计算机硬件上仿真模拟出的一套完整的计算机系统,用于执行...

    垃圾回收机制.docx

    总结来说,JAVA的垃圾回收机制是其面向对象特性的有力支持,它通过自动回收无用对象,降低了内存管理的复杂性,提升了程序的健壮性和性能。理解并掌握垃圾回收机制对于JAVA程序员来说至关重要,它能够帮助我们编写出...

    JVM垃圾回收机制与GC性能调优

    Java虚拟机(JVM)的垃圾回收(GC)机制是Java程序高效运行的关键部分,它自动管理内存,释放不再使用的对象以避免内存泄漏。本文主要探讨JVM堆内存的结构和GC的工作原理,以及如何进行性能调优。 JVM堆是Java应用...

    java 垃圾回收机制详细介绍

    垃圾收集器是Java语言区别于其他程序设计语言的一大特色。它把程序员从手工回收内存空间的繁重工作中解脱了...鉴于此,笔者总结了这个垃圾收集器的专题,希望对广大Java技术的爱好者和准备认证考试的考生们有所帮助。

    垃圾回收机制学习笔记

    ### 垃圾回收机制详解 #### 一、引言 在现代软件开发过程中,内存管理是确保程序高效稳定运行的关键因素之一。垃圾回收(Garbage Collection,简称GC)作为自动内存管理的一部分,在Java等高级语言中扮演着至关...

    JVM的垃圾回收机制详解和调优

    理解并优化JVM的垃圾回收机制对于提升Java应用的性能至关重要。 一、垃圾回收的基本概念 1. 对象生命周期:当一个对象被创建后,它会经历新生、壮年、老年代等阶段。垃圾回收主要关注的是不再被引用的对象,即...

    全面解析Java的垃圾回收机制.doc

    总结起来,Java的垃圾回收机制是其自动内存管理的核心,通过智能地识别和清理无用对象,简化了编程,提高了程序的健壮性。尽管带来了一些性能开销,但随着算法的不断优化,这些负面影响已经显著降低。理解并掌握垃圾...

    Java垃圾回收机制详解

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

Global site tag (gtag.js) - Google Analytics