技术标签: JVM Parallel Scavenge 垃圾收集器 CMS
DefNewGeneration是default new generation
ParNewGeneration是parallel new generation
原本HotSpot VM里没有并行GC,当时就只有NewGeneration;后来准备要加入young gen的并行GC,就把原本的NewGeneration改名为DefNewGeneration,然后把新加的并行版叫做ParNewGeneration。
这些XXXGeneration都在HotSpot VM的“分代式GC框架”内。本来HotSpot VM鼓励开发者尽量在这个框架内开发GC,但后来有个开发就是不愿意被这框架憋着,自己硬写了个没有使用已有框架的新并行GC,并拉拢性能测试团队用这个并行GC来跑分,成绩也还不错,于是这个GC就放进HotSpot VM里了。这就是我们现在看到的ParallelScavenge。
(结果就是HotSpot GC组不得不维护两个功能几乎一样、但各种具体细节不同的并行GC。其实是件很头疼的事情嗯)
Scavenge或者叫scavenging GC,其实就是copying GC的另一种叫法而已。HotSpot VM里的GC都是在minor GC收集器里用scavenging的,DefNew、ParNew和ParallelScavenge都是,只不过DefNew是串行的copying GC,而后两者是并行的copying GC。
由此名字就可以知道,“ParallelScavenge”的初衷就是把“scavenge”给并行化。换句话说就是把minor GC并行化。至于full GC,那不是当初关注的重点。
把GC并行化的目的是想提高GC速度,也就是提高吞吐量(throughput)。所以其实ParNew与ParallelScavenge都可叫做Throughput GC。
但是在HotSpot VM的术语里“Throughput GC”通常特指“ParallelScavenge”。
ParallelScavenge和ParNew都是并行GC,主要是并行收集young gen,目的和性能其实都差不多。最明显的区别有下面几点:
其实最初的ParallelScavenge的目标只是并行收集young gen,而full GC的实际实现还是跟serialGC一样。只不过因为它没有用HotSpot VM的generational GCframework,自己实现了一个CollectedHeap的子类ParallelScavengeHeap,里面都弄了独立的一套接口,而跟HotSpot当时其它几个GC不兼容。其实真的有用的代码大部分就在PSScavenge(=“ParallelScavenge的Scavenge”)里,也就是负责minor GC的收集器;而负责fullGC的收集器叫做PSMarkSweep(=“ParallelScavengeMarkSweep”),其实只是在serialGC的核心外面套了层皮而已,骨子里是一样的LISP2算法的mark-compact收集器(别被名字骗了,它并不是一个mark-sweep收集器)。
当启用-XX:+UseParallelGC时,用的就是PSScavenge+PSMarkSweep的组合。
这是名副其实的“ParallelScavenge”——只并行化了“scavenge”。
所以其实非要说对应关系的话,PSScavenge才是真的跟ParNew对等的东西;ParallelScavenge这个名字既指代整套新GC,也可指代其真正卖点的PSScavenge。
不知道后来什么原因导致full GC的并行化并没有在原本的generational GC framework上进行,而只在ParallelScavenge系上进行了。其成果就是使用了LISP2算法的并行版的full GC收集器,名为PSCompact(=“ParallelScavenge-MarkCompact”),收集整个GC堆。
当启用-XX:+UseParallelOldGC时,用的就是PSScavenge+PSCompact的组合。
此时ParallelScavenge其实已经名不符实了——它不只并行化了“scavenge”(minor GC),也并行化了“mark-compact”(full GC)。
/********************************* * 日期:2013-2-8* 作者:SJF0115 * 题号: 九度OJ 题目1196:成绩排序* 来源:http://ac.jobdu.com/problem.php?pid=1196* 结果:AC * 来源:2009年华中科技大学计算机研究生机试真题* 总结:***********
一般的安装过程可参考文章:http://blog.csdn.net/kangear/article/details/8635029安装过程,如下:下载gdb-7.5.tar.gz(http://www.gnu.org/software/gdb/download/)1、将gdb-7.5.tar.gz拷贝到/usr/local/目录下(可以拷贝到任何你愿意的
先看下面一段代码:package 类集;import java.util.Set;import java.util.TreeSet;class Person{ private String name ; private int age ; public Person(String name,int age){ this.name = name ; this.age = age ; } public String gtoStr
库的使用是十分常见的,大家经常使用库的时候,肯定要知道怎么去安装他们吧,本期就教大家安装的方法,一起来看下吧~关于安装库一共有两个方法方法1:下载源码,命令行运行setup.py install安装在pipy,github等网站,下载源码,往往都是.tar.gz,.zip的压缩包,解压后,打开windows的cmd,切换到对应目录,运行:setup.pyinstall即可安装。建议提前阅读一下R...
bzoj4520 bzoj2850√Ax+By<CAx+By<C bzoj4605 bzoj2648 bzoj2716插入点时要每插入n√\sqrt n个点重构一次 //查询一个点到另一个点的最短曼哈顿距离 int gdis(node a,node now){ //询问的当前点到搞到的kd-tree的矩形的距离 int res=0;
1Win10快捷键大全(第一部分) Win10发布已经快两个星期了,各项新功能也让小伙伴们兴奋不已。和之前系统一样,Win10也加入了很多经典的快捷键,同时还加入了全新触控手势。今天小编就将所有的Win10快捷键汇总一下,希望能对你的使用有所帮助。 点击参加1分钟都不用的Win10调查问卷,赢取正版Win10官方定制精美礼品! 软件名称: ...
我正在测试具有大量数据的表中自动增量整数与GUID(v4)之间的插入性能.在blog post之后,我期待看到差异.但是现在有超过600万行,我认为没有任何区别.这些是我的表的定义:自动递增CREATE TABLE `auto` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`))GUIDCREATE TABLE `guid` (...
select table_name,index_name,blevel,leaf_blocks,distinct_keys,avg_leaf_blocks_per_key avg_leaf_blocks,avg_data_blocks_per_key avg_data_blocks,clustering_factor,num_rows fromuser_indexeswhere table_nam...
浏览器中object显示问题起因解决方案方法一: 直接设置属性值方法二:iframe结论起因设计要求视频控制面板显示在视频界面上,如下图红框内所示。但是因为object不在文档流之中,所以不论别的元素设置z-index多高,都只会被object元素遮住而无法看到。object元素代码如下<object id="EZUIKit" width="400" height="4...
1、完成完整的温度转换程序while True:a = int(input('摄氏温度转换为华氏温度请按1\n华氏温度转换为摄氏温度请按2\n'))if a == 1:# 输入温度s = float(input('请输入摄氏温度:'))# 转换温度c = s * 9 / 5 + 32# 输出输出结果print("摄氏温度{}转换为华氏温度为:{}".format(s, c))elif a == 2...
这一版本主要是对 http://blog.csdn.net/net_wolf_007/article/details/52055718 实现的版本进行优化上一版本主要是根据理论知识实现简单版本,步聚比较清晰。里面存在严重的性能问题,对激活函数的扩展问题及不能批量训练等主要问题。性能上在 http://blog.csdn.net/net_wolf_007/article/details/52
本文,主要讲的是Linux多线程同步之消息队列,Linux多线程同步之消息队列,msgget用于创建一个新队列或打开一个现存的队列。msgsnd将新消息加入到消息队列中;每个消息包括一个long型的type;和消息缓存;msgrcv用于从队列中取出消息;取消息很智能,不一定先进先出。消息队列是消息的链表,存放在内核中并有消息队列标示符标示。msgget用于创建一个新队列或打开一个现存的队列。msg...