下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——java垃圾回收机制是怎样的手动管理内存
在介绍现代版的垃圾回收之前,我们先来简朴地回想下需要手动地显式调配及释放内存的那些日子。假设你忘了去释放内存,那么这块内存就无法重用了。这块内存被占有了却没被使用。这种场景被称之为内存泄露。
下面是用C写的一个手动管理内存的简朴例子:
intsend_request
size_tn=read_size;
int*elements=mallocn*sizeofint;
ifread_elementsn,elementsn
//elementsnotfreed!return-1;//…freeelements
return0;
可以看到,你很轻易就会忘了释放内存。内存泄露曾经是个分外普遍的问题。你只能通过不断地修复自己的代码来与它们举行抗争。因此,需要有一种更优雅的方式来自动释放无用内存,以便裁减人为错误的可能性。这种自动化过程又被称为垃圾回收简称GC。
智能指针
自动垃圾回收早期的一种实现便是引用计数。你知晓每一个对象被引用了几次,当计数器归0的时候,这个对象就可以被安好地回收掉了。C++的共享指针就是一个分外着名的例子:
11intsend_requestsize_tn=read_size;stared_ptrelements=make_shared;ifread_elementsn,elementsnreturn-1;return0;
我们使用的sharedptr会记录这个对象被引用的次数。假设你将它传递给别人那么计数加一,当它离开了作用域后便会减一。一旦这个计数为0,sharedptr会自动地删除底层对应的vector。当然这只是个例如,由于也有读者指出来了,这个在现实中是不太可能展现的,但作为演示是足够了。
自动内存管理
在上面的C++代码中,我们还得显式地声明我们需要使用内存管理。那假设全体的对象都采用这个机制会怎样呢?那简直就太便当了,这样开发人员便无需考虑清理内存的事情了。运行时会自动知晓哪些内存不再使用了,然后释放掉它。也就是说,它自动地回收了这些垃圾。第一代的垃圾回收器是1959年Lisp引入的,这项技术迄今为止一向在不断演进。
引用计数
方才我们用C++的共享指针所演示的想法可以应用到全体的对象上来。大量语言譬如说Perl,Python以及PHP,采用的都是这种方式。这个通过一张图可以很轻易说明:
绿色的云代表的是程序中仍在使用的对象。从技术层面上来说,这有点像是正在执行的某个方法里面的局部变量,亦或是静态变量之类的。不同编程语言的处境可能会不一样,因此这并不是我们关注的重点。
蓝色的圆圈代表的是内存中的对象,可以看到有多少对象引用了它们。灰色圆圈的对象是已经没有任何人引用的了。因此,它们属于垃圾对象,可以被垃圾回收器清理掉。
看起来还不错对吧?没错,不过这里存在着一个重大的缺陷。很轻易会展现一些孤立的环,它们中的对象都不在任何域内,但彼此却彼此引用导致引用数不为0。下面便是一个例子:
看到了吧,红色片面其实就是应用程序不再使用的垃圾对象。由于引用计数的缺陷,因此会存在内存泄露。
有几种方法可以解决这一问题,譬如说使用特殊的“弱”引用,或者使用一个特殊的算法回收循环引用。之前提到的Perl,Python以及PHP等语言,都是使用类似的方法来回收循环引用的,不过这已经超出本文陈述的范围了。我们打定细致介绍下JVM所采用的方法。
标记删除
首先,JVM对于对象可达性的定义要明确一些。它可不像前面那样用绿色的云便含煳了事的,而是有着分外明确及概括的垃圾回收根对象GarbageCollectionRoots的定义:
局部变量
活动线程
静态字段
JNI引用
其它后面将会议论到
JVM通过标记删除的算法来记录全体可达存活对象,同时确保不成达对象的那些内存能够被重用。这包含两个步骤:
标记是指遍历全体可达对象,然后在本地内存中记录这些对象的信息
删除会确保不成达对象的内存地址可以在下一次内存调配中使用。
JVM中的不同GC算法,譬如说ParallelScavenge,ParallelMark+Copy,CMS都是这一算法的不同实现,只是各阶段略有不同而已,从概念上来讲依旧是对应着上面所说的那两个步骤。
这种实现最重要的就是不会再展现泄露的对象环了:
缺点就是应用程序的线程需要被暂停才能完
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 主提升机操作工岗前操作评估考核试卷含答案
- 2026年港口建设设计行业分析报告及未来发展趋势报告
- 2026年中低碳锰铁行业分析报告及未来发展趋势报告
- 2026年盐酸喹那普利片行业分析报告及未来发展趋势报告
- 2026年面部清洁行业分析报告及未来发展趋势报告
- 电炉炼钢工达标评优考核试卷含答案
- 石英晶体振荡器制造工班组协作能力考核试卷含答案
- 2026年珠三角物流行业分析报告及未来发展趋势报告
- 食糖制造工安全防护水平考核试卷含答案
- 锅炉大件热处理工安全宣传评优考核试卷含答案
- RB/T 019-2019实验动物设施性能及环境参数验证程序指南
- GB/T 18993.1-2020冷热水用氯化聚氯乙烯(PVC-C)管道系统第1部分:总则
- GB/T 1406.1-2008灯头的型式和尺寸第1部分:螺口式灯头
- GB 17840-1999防弹玻璃
- 高分子化工概述
- 广通股校学员专用技术文字讲义
- 光谱电化学课件
- 燃料供应预警及应急预案(终版)
- 满堂支架拆除技术交底
- 螺栓连接实验-2015.11.20
- DF4内燃机车电路图
评论
0/150
提交评论