Java垃圾回收(GC)系列六 Java垃圾收集

本系列教程主要讲解Java垃圾回收机制,文章内容是翻译oracle官网的相关文档,有兴趣的同学可以查看官网英文版,具体地址:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

本章节内容主要介绍java垃圾收集。

Java垃圾收集

您现在已经了解了垃圾收集的基础知识,并观察了示例应用程序中的垃圾收集器。在本节中,您将链接可用于Java的垃圾收集器一级选择它们所需的命令行开关。

常见的堆相关开关

有许多不同的命令行开关可以与Java一起使用。本节介绍了本OBE中也使用的一些常用开关。

开关描述
-Xms设置JVM启动时的初始堆大小。
-Xmx设置最大堆大小。
-Xmn设置年轻代的大小。
-XX:PermSize设置永久代的初始大小。
-XX:MaxPermSize设置最大永久代的大小。

串行GC

串行收集器是Java SE 5和6中客户端类型计算机的默认设置。使用串行收集器,次要垃圾回收和主要垃圾回收都是通过串行方式完成的(使用单个虚拟CPU)。 另外,它使用标记紧凑的收集方法。 此方法将较旧的内存移动到堆的开头,以便在堆的末尾将新的内存分配放入单个连续的内存块中。 内存的压缩使更快地向堆分配新的内存块。

使用案例

串行GC是大多数应用程序的垃圾收集器,它们的暂停时间要求不低,并且运行在客户机类型的机器上。它只利用一个虚拟处理器进行垃圾收集工作(因此,它的名称)。尽管如此,在今天的硬件上,串行GC可以有效地管理许多重要的应用程序,这些应用程序只需要几百mb的Java堆,最坏情况下的暂停时间相对较短(对于完整的垃圾收集来说大约需要几秒钟)。

串行GC的另一个流行用法是在同一台机器上运行大量jvm的环境中(在某些情况下,jvm比可用的处理器还要多!)在这样的环境中,当JVM执行垃圾收集时,最好只使用一个处理器来最小化对其余JVM的干扰,即使垃圾收集可能会持续更长时间。而串行GC正好适合这种权衡。

最后,随着具有最少内存和少数核心的嵌入式硬件的普及,串行GC可能会卷土重来。

命令行开关

要启用串行收集器,请使用:

-XX:+UseSerialGC

这是用于启动Java2Demo的示例命令行:

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar

并行GC

并行GC使用多个线程来执行年轻代的垃圾收集。在具有N个cpu的主机上,并行垃圾收集器在收集中使用N个垃圾收集器线程。垃圾收集器线程的数量可以通过命令行选项来控制:

-XX:ParallelGCThreads=<desired number>

在只有一个CPU的主机上,即使请求了并行垃圾收集器,也会使用默认的垃圾收集器。在有两个cpu的主机上,并行垃圾收集器的性能通常与默认的垃圾收集器一样好,而在有两个以上cpu的主机上,年轻的年轻代收集器暂停时间的减少是可以预期的。并行GC有两种方式。

使用案例

并行收集器也称为吞吐量收集器。由于它可以使用多个CPU来加快应用程序的吞吐量。当需要做大量工作并且可以接受长时间的暂停时,应该使用此收集器。例如,批处理,比如打印报告或账单,或者执行大量的数据库查询。

-XX:+UseParallelGC

使用此命令行选项,您将获得一个多线程年轻代收集器和一个单线程旧代收集器。 该选项还可以完成旧版本的单线程压缩。

这是用于启动Java2Demo的示例命令行:

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseParallelGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar

-XX:+UseParallelOldGC

使用 -XX:+UseParallelOldGC选项,GC既是多线程的年轻代收集器,又是多线程的旧代收集器。 它也是多线程压缩收集器。 HotSpot仅在老一代中进行压缩。 HotSpot中的年轻一代被视为副本收集者; 因此,不需要压缩。

并发标记扫描(CMS)收集器

 

G1垃圾收集器

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值