|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。
弁言
上一章我们已切磋过GC的各个算法,那末渣滓汇集器是甚么呢?
普通的讲,利用编程言语将算法完成出来,发生的程序就是渣滓汇集器了。既然谈到了编程言语的完成,那末在会商渣滓汇集器的时分,就已触及到详细的假造机完成了。
也许有很多做JAVA开辟的猿友还不晓得,我们平常利用的JDK中,默许的JVM是hotspot,换句话说,我们年夜部分时分利用的JVM都是hotspot的完成版本,因而,本次LZ会商渣滓汇集器都是基于hotspot版JVM来举行的,请列位猿友要晓得这一点。
更直不雅的,我们能够在我们平常开辟的机子上,输出java-version来检察JVM的版本,信任年夜部分猿友对这个命令都不生疏吧,LZ的机子截图以下。
渣滓汇集器的分类
下面我们已提到,渣滓汇集器实践就是算法的编程言语完成。既然牵涉到编程言语,那末一定离不开线程,并且我们在后面解说算法的时分也一向假定是一条GC线程在做着GC的事变。
因而,渣滓汇集器大抵分为以下三类。
串行汇集器(serialcollector):它只要一条GC线程,且就像后面说的,它在运转的时分必要停息用户程序(stoptheworld)。
并行汇集器(parallelcollector):它有多条GC线程,且它也必要停息用户程序(stoptheworld)。
并发汇集器(concurrentcollector):它有一条或多条GC线程,且它必要在部分阶段停息用户程序(stoptheworld),部分阶段与用户程序并发实行。
并发(concurrent)与并行(parallel)
看完下面的界说,信任有一部分猿友已蒙了,一会单线程,一会多线程,一会串行,一会并行,一会并发,这都神马玩意?
URL:http://www.bianceng.cn/Programming/Java/201410/45824.htm
单线程和多线程就不用多说了,这个很好了解,串行与并行也对照好了解,难于分辩的就是并行(parallel)与并发(concurrent)。
关于良多有关并发的注释,LZ以为有一个最贴切。它是这么注释的,并发就是两个义务A和B必要互相自力的运转,而且A义务先入手下手后,B义务在A义务停止之前入手下手了。
并发自己是对照好了解的,那末它与并行的干系与区分是甚么呢?
现实上,并行是并发的一种完成体例。LZ以为这么说列位大概会更好了解,固然,并行并非并发的独一完成体例,另有一种就是我们所熟习的工夫片切换。也就是A义务实行一会,B义务实行一会,瓜代实行。
并行必需在多核多处置器大概散布式体系(实质仍是多核多处置器)的条件下才干产生,而瓜代实行大概说工夫片切换是在单核的处置器上产生的。
hotspot中的渣滓汇集器
我们下面已复杂切磋了渣滓汇集器的分类,在hotspotJVM中,每个品种的渣滓汇集器都有对应的完成,以下。
串行汇集器的完成:serial(用于重生代,接纳复制算法)、serialold(用于大哥代,接纳标志/收拾算法)
并行汇集器的完成:ParNew(用于重生代,接纳复制算法)、ParallelScavenge(用于重生代,接纳复制算法)、Parallelold(用于大哥代,接纳标志/收拾算法)
并发汇集器的完成:concurrentmarksweep[CMS](用于大哥代,接纳标志/扫除算法)
能够看到,下面每种渣滓汇集器都是针对分歧内存地区所计划的,由于它们接纳的算法分歧,但凡用于重生代的都是利用的复制算法,而用于大哥代的都是利用的标志/扫除大概标志/收拾算法。
在实践使用中,我们必要给JVM的重生代和大哥代分离选择渣滓汇集器,能够看到不管是重生代仍是大哥代都分离有三种完成,换句话说,我们应当有3*3=9种选择。可是,现实并不是云云。
现实上,这六种渣滓汇集器只要六种选择,由于有的渣滓汇集器因为详细完成的体例等一系列缘故原由没法在一同事情,以下图。
针对上图,红的就是串行汇集器,绿的是并行汇集器,独一一个黄的是并发汇集器。下面三个是重生代的汇集器,上面三个是大哥代的汇集器。二者之间有连线,则暗示二者能够共同事情。
这六种组兼并没有说哪一个组合最强,哪一个组合最弱,仍是那句话,只要最符合的,没有最好的。因而这就必要我们对每种组合有必定的熟悉,才干在利用的时分选择更合适的渣滓汇集器。
停止语
本次大抵先容了一下六种渣滓汇集器,和它们的干系。每种渣滓汇集器的特性与实行体例,我们鄙人一章再一同切磋。
zuoxiaolong(左潇龙)
出处:博客园左潇龙的手艺博客--http://www.ckuyun.com/zuoxiaolong
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译) |
|