JAVA基础-Java5.0垃圾收集原理_第1页
JAVA基础-Java5.0垃圾收集原理_第2页
JAVA基础-Java5.0垃圾收集原理_第3页
JAVA基础-Java5.0垃圾收集原理_第4页
JAVA基础-Java5.0垃圾收集原理_第5页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JAVA基础:Java5.0垃圾收集原理垃圾收集器的选择何时会对用户产生影响呢?对很多应用程序来说,它根本没有影响。也就是说,在垃圾收集产生的暂停的频率与持续时间适度的状况下,应用程序可在其标准内执行。假如一个大型应用程序消失扩大,产生大量线程、处理器、套接字和很多内存,就会消失例外。假如一个对象再也不能通过运行程序中的任何指针到达,则视其为垃圾。最直接的垃圾收集运算法则简洁地在每个可到达的对象间迭代。那么,剩下的对象即为垃圾。这一方法所用的时间与活动对象的数目成比例关系,且制止用于维护很多活动数据的大型应用程序。从Java 2开头,虚拟机合并了很多应用分代收集组合的各种收集运算法则。尽管简洁

2、的垃圾收集检查堆中的每一个活动对象,但分代收集利用多数应用程序的几个凭阅历观看得到的特性来避开额外工作。这些观看得到的特性中最为重要的一个就是所谓的早期失效率。很多对象安排以后很快“已经死亡。例如,迭代器对象仅在单独循环中存活。为优化这种状况,我们对内存进展分代治理,或在内存池中保存不同年龄的对象。当一代装满时,就对这个代进展垃圾收集。对象被安排到更年龄对象代,或新生代中。由于早期失效率,多数对象在那里死亡。假如垃圾收集器成为瓶颈,你可能盼望自定义代的大小。具体检查垃圾收集器的输出,然后探究单共性能计量单位对垃圾收集器参数的灵敏度。初始化时,保存一个的地址空间,在必要时才安排给物理内存。为对象

3、内存保存的全部地址空间可分为新生代和旧生代。新生代由eden和两个生存空间组成。对象最初安排到eden中。任何时候,一个生存空间为空,并作为下一个空间的目的地,在eden与另一个生存空间中复制活动对象的集合。对象以这种方式在生存空间中复制,直到它们老化,或复制到旧生代中。与旧生代关系亲密的第三个代称为永生代。这是一个特殊的代,由于它保存虚拟机所需要的数据,来描述在Java语言中没有等同物的对象。例如,描述类与方法的对象存储在永生代中。性能因素Java应用程序特殊是垃圾收集有两共性能计量单位:吞吐量与暂停。吞吐量是指在一段较长时间内,没有用于垃圾收集的时间百分比。吞吐量包括用于安排的时间但用于调

4、整安排速度的时间一般不包括在内。暂停是应用程序由于垃圾收集而消失的停立刻间。一些用户还对其他因素较为敏感。例如,占用率footprint是一批工作进程的集合,以页和缓冲行数计量,在物理内存有限或者有许多进程的系统中,占用率可表示扩展性。反响性Promptness是对象死去的时间和内存变为可用时的时间差,是分布系统,包括远程方法调用RMI中的重要因素。通常来说,特定的代大小选择这些因素之间的平衡作用。例如,一个特别大的新生代的吞吐量可以,但这要以牺牲占用率、反响性和暂停时间为代价。你也可以牺牲吞吐量,应用一个小型的新生代来使新生代暂停时间最短。假如你盼望提高有大量处理器的应用程序的性能,你应当使

5、用吞吐量收集器。你可以用命令行标记-XX:+UseParallelGC来激活吞吐量收集器。你可以用 ParallelGCThreads 选项-XX:ParallelGCThreads=来掌握垃圾收集器线程的数量。暂停时间目标用命令行标记-XX:MaxGCPauseMillis二来指定,这是对吞吐量收集器的一个示意,即它需要毫秒或更短的暂停时间。存在有很多调整代大小的选项,如-XX:YoungGenerationSizeIncrement二用于新生代;而-XX:TenuredGenerationSizeIncrement=用于旧生代。假如应用程序受益于较短的垃圾收集器暂停,且能够在应用程序运行时

6、与垃圾收集器共享处理器资源,我建议使用并行低暂停收集器。假如旧生代占用率超出初始占用率即当前堆的百分比用于并发收集启动之前,并发收集将启动。默认的初始占用率约为68%。你可以用参数-XX:CMSInitiatingOccupancyFraction=进展设置,这里的是当前旧生代大小百分比。你能够以并发阶段递增完成的方式使用并发收集器。这种模式这里称之为 i-cms将收集器并发完成的工作分割成时间小段,安排在新生代收集之间。当需要并发收集器供应短暂停时间的应用程序在拥有少量处理器的机器上运行时,这一特性很有帮忙。微调垃圾收集命令行参数-verbose:gc打印每个收集阶段的信息。假如翻开此参数,

7、你会在每个垃圾收集阶段看到相像的输出结果。例如:GC 325407K-83000K(776768K), 0.2300771 secsGC 325816K-83372K(776768K), 0.2454258 secsFull GC 267628K-83769K(776768K), 1.8479984 secs有两个次要收集和一个主要收集(完全GC)。标记-XX:+PrintGCDetails 打 印 收 集 的 其 他 信 息。 标 记-XX:+PrintGCTimeStamps打印每次收集开头的时间。列表A是两个标记被设定后的结果。另外,主要收集的信息由旧生代描述。在这里,旧生代使用率削减到

8、约10%,所用时间约为0.13秒。很多参数影响代的大小。在虚拟机的初始阶段,堆的整个空间被保存。你可以用-Xmx选项指定保存空间的大小。假如-Xms参数的值小于-Xmx参数的值,表示不是全部的保存空间马上提交给虚拟机。堆的不同局部(永生代、旧生代和新生代)必要时可能会超出虚拟空间的限制。默认状况下,在每次收集时,虚拟机增大或缩小堆的大小,努力将自由空间与活动对象的比例保持在一个特定的范围内。这个范围是一个百分数,由参数-XX:MinHeapFreeRatio=和-XX:MaxHeapFreeRatio=设定,-Xms为下限,-Xmx为上限。除非有暂停问题,否则向虚拟机许可尽可能多的内存。默认的

9、大小(64MB) 般都太小。你可以在Sun网站找到其他VM选项的说明。你还可以为新生代的堆设定一个比例。新生代越大,次要收集就越少发生。但是,在一个有限大小的堆中,新生代越大就意味着旧生代越小,这会增加主要收集的频率。选择要依据应用程序安排的对象的寿命安排来打算。新生代的大小由NewRatio掌握。例如,设定-XX:NewRatio=3说明新生代与旧生代之比为1: 3。假如盼望的话,可用参数SurvivorRatio来调整生存空间的大小,但它并不如性能重要。例如,-XX:SurvivorRatio=6说明每个生存空间与eden的比为1: 6。除非你发觉过多主要收集或暂停时间问题,向新生代许可大量内存。Java 5.0执行了三个不同的垃圾收集器。吞吐量收集器使用新生代收集器的并行版本。假如-XX:+UseParallelGC选项传递给命令行,则使用并行收集器;假如-Xincgc或-XX:+UseConcMarkSweepGC选项传递给命令行,则使用并发收集器。在这种状况下,收集过程中应用程序会消失短期暂停。假如-XX:+UseTrainGC传递经命令行,则使用递增式低暂停收集器。将来版本将不支持这一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论