深入java虚拟机 - 垃圾收集 - 火车算法-程序员宅基地

技术标签: java  

主要看《深入java虚拟机第二版》这本书。 

下面转自http://blog.csdn.net/zouxinfox/article/details/1594216


       垃圾收集算法一个很大的缺点就是难以控制垃圾回收所占用的CPU时间,以及何时需要进行垃圾回收。火车算法是分代收集器所用的算法,目的是在成熟对象空间中提供限定时间的渐进收集。目前应用于SUN公司的Hotspot虚拟机上。

       在火车算法中,内存被分为块,多个块组成一个集合。为了形象化,一节车厢代表一个块,一列火车代表一个集合,见图一

图一

注意每个车厢大小相等,但每个火车包含的车厢数不一定相等。垃圾收集以车厢为单位,收集顺序依次为1.11.21.31.42.12.22.33.13.23.3。这个顺序也是块被创建的先后顺序。

垃圾收集器先从块1.1开始扫描直到1.4,如果火车1四个块中的所有对象没有被火车2和火车3的对象引用,而只有火车1内部的对象相互引用,则整个火车1都是垃圾,可以被回收。

图二,车厢1.1中有对象A和对象B1.3中有对象C1.4中有对象D车厢2.2中有对象E,车厢3.3中有对象F。在火车1中,对象C引用对象A,对象B引用对象D,可见,火车2和火车3没有引用火车1的对象,则整个火车1都是垃圾。

 

图二

如果火车1中有对象被其它火车引用,见图三,扫描车厢1.1时发现对象A被火车2中的E引用,则将对象A从车厢1.1转移到车厢2.2,然后扫描A引用的对象D,把D也转移到车厢2.2,然后扫描D,看D是否引用其它对象,如果引用了其它对象则也要转移,依次类推。扫描完火车1的所有对象后,剩下的没有转移的对象都是垃圾,可以把整个火车1都作为垃圾回收。注意如果在转移时,如果车厢2.2空间满了,则要在火车2末尾开辟新的车厢2.4,将新转移的对象都放到2.4,即火车的尾部)

图三

     补充说明:垃圾回收器一次只扫描一个车厢。图三中的对象B与C并不是立即被回收,而是先会被转移到火车1的尾部车厢。即扫描完1.1后,B被转移到火车1尾部,扫描完1.3后,C被转移到车尾。等垃圾收集器扫描到火车1尾部时,如果仍然没有外部对象引用它们,则B和C会被收集。

     火车算法最大的好处是它可以保证大的循环结构可以被完全收集,因为成为垃圾的循环结构中的对象,无论多大,都会被移入同一列火车,最终一起被收集。还有一个好处是这种算法在大多数情况下可以保证一次垃圾收集所耗时间在一定限度之内,因为一次垃圾回收只收集一个车厢,而车厢的大小是有限度的。


下面是《深入java虚拟机第二版》的截图:












版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/feier7501/article/details/21748615

智能推荐

netty实现websocket聊天并发送文件_websocket实现聊天,图片,文件发送-程序员宅基地

文章浏览阅读1.6k次。1.实现了发送文字聊天 用户上下下线自动更新聊天列表 网页保存聊天记录2.发送文件 最大支持30兆 ,代码中可修改3.浏览器通知,https下发送文件的实现思路是在文件前200个字节拼接发送人的信息以及文件名 不够200字节用&填补后台代码在w3cschool的基础上修改的效果图如下启动成功后访问http://localhost:7633/chat.htm..._websocket实现聊天,图片,文件发送

习题8:编写一个控制台应用程序,完成下列功能,并写出运行程序后输出的结果。_编写一个控制台应用程序调用getservbyport()查询并显示本机上所有的使用udp协议的服务的-程序员宅基地

文章浏览阅读8k次,点赞3次,收藏20次。 编写一个控制台应用程序,完成下列功能,并写出运行程序后输出的结果。1) 创建一个类A,在A中编写一个可以被重写的带int类型参数的方法MyMethod,并在该方法中输出传递的整型值加10后的结果。2) 再创建一个类B,使其继承自类A,然后重写A中的MyMethod方法,将A中接收的整型值加50,并输出结果。3) 在Main方法中分别创建类A和类B的对象,并分别调用MyMethod_编写一个控制台应用程序调用getservbyport()查询并显示本机上所有的使用udp协议的服务的名称及端口号

使用cmd命令,运行java正常,无法运行javac_cmd只能运行javac不能运行java-程序员宅基地

文章浏览阅读3.9k次。今天在装jdk时,出现java能正常运行,而显示javac不是内部或外部命令,也不是可运行的程序或批处理文件。原因是我在装jdk时将jdk和jre装到了一个文件夹,卸载之后重新装了一遍就好了。..._cmd只能运行javac不能运行java

代码管理之结合repo和git搭建代码服务器_repo和git 配合使用-程序员宅基地

文章浏览阅读2.2k次。在管理android项目的时候,如果使用一个git仓库来管理整个android的源码的话,感觉总是不爽,所以谷歌引入了repo,说白了,repo其实就是一个python写的脚本,用于管理多个git仓库的代码,使得我们可以同时下载多个git仓库的代码,而这些git仓库的代码可以组成我们最终想要的整个大的工程的全部代码。总结一句话,repo是用来管理多个git仓库的工具。那么如何搭建repo工_repo和git 配合使用

python QT 图片缩放,移动_qtdesigner中怎么让图片随着控件缩放而变化-程序员宅基地

文章浏览阅读5.4k次,点赞28次,收藏93次。利用python的QT库搭建图片显示界面,实现图片的拖拽、以鼠标中心缩放等功能。_qtdesigner中怎么让图片随着控件缩放而变化

Powerdesigner逆向工程从现有数据库生成PDM _powerdesigner 从数据库反向生成pdm-程序员宅基地

文章浏览阅读432次。在数据建模过程中,我们建立概念数据模型,通过正向工程生成物理数据模型,生成数据库建库脚本,最后将物理数据模型生成关系数据库,现在反过来,通过逆向工程将关系数据库,生成物理数据模型。 优点: 在丢失数据模型或者数据库模型同现有的数据库不一致,可以通过该方法生成使用中数据库的模型 缺点: 还原回的模型中,可能会没有中文注释,没有表外键对应关系(字段还有,索引关系没了) 前提: _powerdesigner 从数据库反向生成pdm

随便推点

基于Android的VoIP系统实现原理_android voip forward-程序员宅基地

文章浏览阅读4.2k次。VoIP(Voice over Internet Protocol)即首先数字化语音信号并压缩成帧,转换为IP数据包在网络上传输,以此完成语音通话的业务,是一种利用IP协议传输语音数据的、新兴的通信技术。  随着我国三网融合的推进,VoIP与IPTV(Interactive Personality TV)一起成为这一庞大工程的重要标志。而目前手机中,VoIP的解决方案并不是很多,特别是_android voip forward

XShell连接虚拟机输入命令卡顿问题解决_redhat9连接xshell连接虚拟机容易卡顿-程序员宅基地

文章浏览阅读2.3k次,点赞20次,收藏6次。第一步:打开会话管理器第二步:选中正在使用的会话,鼠标右键选择属性第三步:定位到【连接】->【ssh】->【隧道】,选择【隧道】第四步:将【转发X11连接到(X)】复选框取消掉最后一步:点击确定,重新连接图片:..._redhat9连接xshell连接虚拟机容易卡顿

如果第一次启动使用ZooKeeper时,没注意用root用户启动了,生成的zookeeper.out文件权限就会改变,如果之后再使用普通用户去启动的话就会没有权限-程序员宅基地

文章浏览阅读226次。ZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper-3.4.13/bin/../conf/zoo.cfgStarting zookeeper ... /usr/local/zookeeper-3.4.13/bin/zkServer.sh: line 140: ./zookeeper.out: Permission deniedSTARTED_zookeeper.out文件

南阳理工OJ_题目91 阶乘之和_南阳理工oj91-程序员宅基地

文章浏览阅读629次。//用n从9的阶乘开始向前减 #include using namespace std;int main(){ int T; int a[] = {1, 2, 6, 24, 120, 720, 5040, 40320, 362880}; cin >> T; while(T--) { int n; cin >> n;_南阳理工oj91

B2B,B2C,C2C,C2B,B2G_c2b网站代表-程序员宅基地

文章浏览阅读2.8w次,点赞4次,收藏7次。B2B、C2C、B2C B2B:B2B(Business To Business)是指一个市场的领域的一种,是企业对企业之间的营销关系。电子商务是现代B2B marketing的一种具体主要的表现形式。它将企业内部网,通过B2B网站与客户紧密结合起来,通过网络的快速反应,为客户提供更好的服务,从而促进企业的业务发展。 B2B模型 简介 目前基于互联网的B2B_c2b网站代表

物联网概论(IoT)_Chp5 物联网通信 Zigbee/蓝牙/UWB/WLAN/WiMax_公用电信网可以划分为哪三部分?-程序员宅基地

文章浏览阅读6.5k次。Chp5 物联网通信公用电信网可划分为三个部分,即长途网(长途局以上的部分)、中继网(长途局与市话端局之间、市话端局与市话端局之间的部分)和接入网(端局与用户之间的部分)。目前国际上倾向于将长途网和中继网合在一起称为核心网,相对于核心网的部分就是接入网。在物联网中,接入网技术是物联网通信的关键技术,接入网和核心网共同构成了物联网通信的体系架构。依通信覆盖范围的不同,无线网络从小到大依次为无线个域网(WPAN)、无线局域网(WLAN)、无线城域网(WMAN)和无线广域网(WWAN)。无线接入技术能实现真_公用电信网可以划分为哪三部分?

推荐文章

热门文章

相关标签