前两篇《JVM入门——运行时数据区》《JVM常见垃圾回收算法》所提到的实际上JVM规范以及常用的垃圾回收算法,具体的JVM实现实际上不止一种,有JRockit、J9等待,当然最有名当属HotSpot JVM。下面是HotSpot JVM的整体架构图,本文着重介绍HotSpot中的垃圾回收器(Garbage Collector)。
现有的HotSpot垃圾回收器以及之间的关系和应用范围如下图所示:
其中G1 GC非常显眼的处于新生代和老年代之间,可以猜测这个G1 GC可同时运用在新生代和老年代,确实可以说G1是一个划时代新概念GC。
在介绍上面的垃圾回收器之前要先说明JVM虚拟机的Client模式和Server模式,Java所能做的事一是做客户端简单说就是GUI桌面应用程序,二是可以用作服务器端。两种模式Client模式启动快,启动后性能较差,Server模式启动慢,启动后性能较高。
Serial GC(-XX:+UseSerialGC,复制算法,新生代)
这是一个比较古老的垃圾收集器,我理解它为“简单粗暴”,简单粗暴的方法往往可以应对简单的环境,事实上Serial GC在Client模式下正是如此。它是一个串行的垃圾收集器,串行意味着就算是有多核处理器也不会有多个线程来并行回收,在串行的同时,其它的正常工作线程也要停止工作,称为“Stop the world”。这实际很好理解,你在清扫垃圾的时候,总不希望有人同时在丢垃圾吧。当然Serial GC在如今的HotSpot JVM中Server模式下已经几乎废弃。另外,它工作使用垃圾回收的“复制算法”工作在Java堆的新生代。
ParNew GC(-XX:+UseParNewGC,复制算法,新生代)
ParNew GC实际上是Serial GC的多线程版本。上面提到了Serial GC即使是多核CPU的环境下也是单线程进行垃圾内存的回收。此垃圾收集器侧可以做到多线程环境下进行垃圾内存的回收,这个多线程也仅仅是垃圾回收的多线程,而不是与用户线程并发执行。并且只有它能与CMS老年代的垃圾回收器配合使用,而CMS又恰恰是划时代意义的垃圾回收器,所以当JVM的老年代垃圾回收器是CMS的话,新生代的垃圾回收器通常是ParNew GC。
Parallel GC(-XX:+UseParallelGC,复制算法,新生代)
它有点和ParaNew GC类似,从名字上来看也是并行的多线程收集器。我们之前提到过,在进行GC的过程中要“Stop the world”,停顿时间越短当然越好,很多垃圾回收器(包括前两个)关注的就是如何提高停顿时间。而Parallel GC关注的则是吞吐量。它关注的是垃圾回收的整体耗时,如果垃圾回收所占用的整体耗时较短,则吞吐量高,CPU就能将越多的时间用于任务的执行上,(吞吐量 = 任务运行时间 / (任务运行时间 + 垃圾回收时间))。
Serial Old GC(-XX:+UseSerialOldGC,标记-压缩算法,老年代)
它是Serial GC的老年代版本,同样也是单线程,也能与Parallel GC配合使用作为它的老年代GC。
Parallel Old GC(-XX:+UseParallelOldGC,标记-压缩算法,老年代)
为了避免如果在新生代选择了Parallel GC而老年代则只有选择Serial Old GC的困境,出现了Parallel GC的老年代版本——Parallel Old GC。故如果在一些需要高吞吐量的常量利用Parallel GC和Parallel Old GC组合将会是一个很好的选择。
☆Concurrent Mark Sweep(CMS) GC (-XX:+UseConcMarkSweepGC,标记-清除算法,老年代)
CMS GC几乎占据着JVM老年代垃圾收集器的半壁江山,它划时代的意义就是垃圾回收线程几乎能用户线程做到同时工作。“几乎”是因为它还是不能做到完全不需要“Stop the world”,只是它尽可能的缩短了停顿时间。
它的整个垃圾回收过程可分为以下4个步骤:
初始标记
并发标记
重新标记
并发清理
这4个步骤“初始标记”和“重新标记”需要进行短暂的“Stop the world”,并发标记的过程实际上就是和用户线程同时工作,也就是“一边丢垃圾,一边打扫”,这样就会带来一个问题,如果垃圾的产生是在标记后发生,那么这次垃圾就只有等到下次再回收。当然等到标记完了过后垃圾自然不会和用户线程产生冲突,而清理过程就能和用户线程同时处理了。对于此垃圾回收器有一个比较显著且不可避免的一个问题就是它所采用的是“标记-清除”算法,也就是说它不同会压缩存活的对象,这样就会带来内存空间碎片化的问题,如果出现需要分配一个连续的较大的内存空间则只能触发一次Full GC。上一篇《JVM常见垃圾回收算法》中谈到了在新生代的垃圾回收称为“Minor GC”,老年代的垃圾回收称为“Major GC”,而“Full GC”则是在整个堆上触发一次垃圾回收,可想而知代价会相当高,而且此时不得不暂停用户线程,只能针对具体使用场景通过调整CMS GC的参数对其进行调整优化。
☆Garbage-First(G1) GC(-XX:+UseG1GC)
G1 GC较之前所有的垃圾回收器都不同,从开头的第二幅图就能看出,它涵盖了新生代和老年代,或者说仅仅是从逻辑上还保留“新生代”和“老年代”这种说法,实际上它已不存在内存分代,它在JDK6中仅仅是实验版,在JDK7u4过后才正式商用,对于此垃圾回收器我将会单独对其讲解,另外它的论文地址在:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.63.6386&rep=rep1&type=pdf。
以上是Hotspot--垃圾回收器(JVM)详细讲解的详细内容。更多信息请关注PHP中文网其他相关文章!

win7系统是一款被用户认可的高性能系统。最近很多的win7小伙伴们在问win7怎么做wifi热点?今天小编就为大家带来了win7wifi热点开启设置的方法一起来看看吧。win7怎么做wifi热点设置:1、要想开启wifi热点,首先得要有无线网卡,笔记本是有自带的,pc的话可以购买一个随身wifi来分享wifi,这里就不叙述了;首先按下键盘上的windows键打开“开始菜单”,在其下方的搜索栏中输入“cmd”并点击放大镜图标进行搜索;2、在搜索结果中找到CMD程序后用鼠标右键点击打开菜单,选择“

一些用户在使用电脑的时候,出现了win10系统清理垃圾的情况,当遇到win10系统清理垃圾这种情况,我们应该如何解决呢?如今还有很多用户不知道如何处理win10系统清理垃圾的情况,那么接下来就来看看win10清理系统垃圾的步骤教程,大家一起来看看吧。1、在电脑桌面上,点击“此电脑”,管理。2、选择磁盘管理3、选择你要清理的磁盘,右击选择属性。4、点击页面下方的“磁盘清理”按钮5、在出现的界面中,选择要清理的文件,点击“确定”,点击“删除文件”即可。以上就是win10清理系统垃圾的步骤教程啦,希望

每个用户基本多有自己的d盘用来下载软件,但是在最新的win11系统中有很多还是不清楚该怎么去清理其中的垃圾,所以今天就给你们带来了win11清理d盘垃圾详细教程,快来一起学习操作一下吧。win11怎么清理d盘垃圾:1、首先进入桌面的此电脑,然后右击你的d盘。2、然后点击菜单中的“属性”设置。3、之后你可以看到常规工具下面的“磁盘清理”功能。4、最后点击出现的“清理系统文件”就可以全部解决了。

电脑使用时间久了C盘中的垃圾文件越来越来多,垃圾文件的存在会在一定程度上影响系统的运行速度,所以电脑使用的感觉会越来越慢,为了让电脑流畅运行,不影响正常的操作,下面,小编这就跟大家展示win10清理垃圾的操作。win10作为新系统,很多用户都已经安装了win10正式版,不过最近不少朋友反映自己安装了win10后系统盘变得过于拥挤了,导致运行系统的速度越来越慢,那么该如何去清理win10系统的垃圾呢?下面小编就给大家分享彻底清理win10系统的方法。win10怎么清理垃圾在Windows10桌面上

c盘中一般都是装了我们电脑的一些重要文件,如果不小心删除了就会直接影响到我们电脑的使用,那么win7系统下,该怎么清理C盘的垃圾,才会不误删系统文件呢?现在就一起来看看吧。win7清理c盘垃圾怎么清理不影响系统1、双击计算机图标,进入资源管理器。2、右击C盘,选择属性3、点击常规,点击磁盘清理。4、勾选需要清理的文件点击确定即可。

本站10月31日消息,菜鸟今年双11期间将对绿色回收进行升级,除往年持续开展的快递包装回收外,服饰、鞋靴和旧书等品类均可回收。菜鸟在前两年回箱换蛋的基础上,升级为参与活动领取回收金。11月1日-20日期间,消费者在菜鸟驿站取件后将快递包装留下,再通过现场扫码或菜鸟App内承诺回箱,以及线上预约回收旧衣等,即可领取回收金。回收来的快递包装会被用于二次寄件或再生再利用。本站注意到,回收金活动分为三种类型:回箱、回收和分享回箱(快递纸箱):0.1元/次,每天每位用户4次回箱上限回收(旧衣服等物品)的价

Java的垃圾回收机制是JVM自动管理内存的关键功能。以下是有关Java垃圾回收和性能优化的详细说明。垃圾回收机制:对象的生命周期:在Java中,当创建对象时,它们会被分配在堆内存中。当对象不再被引用时,它们就变得不可达。垃圾回收机制负责识别和清理这些不可达的对象,以回收内存空间。垃圾回收算法:Java的垃圾回收算法主要分为两种:标记-清除算法和复制算法。标记-清除算法标记并清理不可达对象,但可能会产生内存碎片。复制算法将内存分为两个区域,当一个区域满了,就将存活的对象复制到另一个区域,并清理原

清理c盘垃圾的方法:1、关闭休眠功能;2、清理临时文件;3、转移软件至其他盘;4、卸载不必要的应用程序;5、清理Internet临时文件;6、更改桌面存储位置;7、使用磁盘清理工具;8、定期备份重要数据。详细介绍:1、关闭休眠功能,休眠功能会将内存中的数据保存到硬盘中,占据大量空间,可以关闭休眠功能以释放空间;2、清理临时文件,临时文件也是占用C盘空间的一个因素等等。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版