2022年java垃圾回收机制知识 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年java垃圾回收机制知识 .pdf》由会员分享,可在线阅读,更多相关《2022年java垃圾回收机制知识 .pdf(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、上次讲到引用类型和基本类型由于内存分配上的差异导致的性能问题。那么今天就来聊一下和内存释放(主要是gc)有关的话题。事先声明一下:虽说sun 公司已经被oracle吞并了,但是出于习惯,同时也为了偷懒节省打字,以下仍然称之为sun 公司。jvm 的内存在 java 虚拟机规范中(具体章节请看“这里”),提及了如下几种类型的内存空间:栈内存(stack):每个线程私有的。堆内存(heap):所有线程公用的。方法区(method area):有点像以前常说的“进程代码段”,这里面存放了每个加载类的反射信息、类函数的代码、编译时常量等信息。原生方法栈(native method stack):主要用
2、于 jni 中的原生代码,平时很少涉及。关于栈内存(stack)和堆内存(heap),已经在上次的帖子中扫盲过了,大伙儿应该有点印象。由于今天咱们要讨论的“垃圾回收”话题,主要是和堆内存(heap)有关。其它的几个玩意儿不是今天讨论的重点。等以后有空了,或许可以单独聊一下。垃圾回收机制简介其实 java 虚拟机规范中并未规定垃圾回收的相关细节。垃圾回收具体该怎么搞,完全取决于各个jvm 的设计者。所以,不同的jvm 之间,gc 的行为可能会有一定的差异。下面咱拿sun 官方的 jvm 来简单介绍一下 gc 的机制。啥时候进行垃圾回收?一般情况下,当jvm 发现堆内存比较紧张、不太够用时,它就会
3、着手进行垃圾回收工作。但是大伙儿要认清这样一个残酷的事实:jvm 进行 gc 的时间点是无法准确预知的。因为gc 启动的时刻会受到各种运行环境因素的影响,随机性太大。虽说咱们无法准确预知,但如果你想知道每次垃圾回收执行的情况,还是蛮方便的。可以通过 jvm 的命令行参数“-xx:+printgc”把相关信息打印出来。另外,调用 system.gc()只是建议 jvm 进行 gc。至于 jvm 到底会不会做,那就不好说啦。通常不建议自己手动调用system.gc(),还是让 jvm 自行决定比较好。另外,使用jvm 命令行参数“-xx:+disableexplicitgc”可以让 system.
4、gc()不起作用。谁来负责垃圾回收?一般情况下,jvm 会有一个或多个专门的垃圾回收线程,由它们负责清理回收垃圾内存。如何发现垃圾对象?垃圾回收线程会从“根集(root set)”开始进行对象引用的遍历。所谓的“根集”,就是正在运行的线程中,可以访问的引用变量的集合(比如所有线程当前函数的参数和局部变量、当前类的成员变量等等)。垃圾回收线程先找出被根集直接引用的所有对象(不妨叫集合1),然后再找出被集合1直接引用的所有对象(不妨叫集合2),然后再找出被集合2 直接引用的所有对象.如此循环往复,直到把能遍历到的对象都遍历完。凡是从根集通过上述遍历可以到达的对象,都称为可达对象或有效对象;反之,则
5、是不可达对象或失效对象(也就是垃圾)。如何清理/回收垃圾?通过上述阶段,就把垃圾对象都找出来。然后垃圾回收线程会进行相应的清理和回收工作,包括:把垃圾内存重新变为可用内存、进行内存的整理以消除内存碎片、等等。这个过程会涉及到若干算法,有兴趣的同学可以参见“这里”。限于篇幅,咱就不深入聊了。分代早期的 jvm 是不采用分代技术的,所有被 gc 管理的对象都存放在同一个堆里面。这么做的缺点比较明显:每次进行 gc都要遍历所有对象,开销很大。其实大部分的对象生命周期都很短(短命对象),只有少数对象比较长寿;在这些短命对象中,又只有少数对象占用的内存空间大;其它大量的短命对象都属于小对象(很符合二八原
6、理)。有鉴于此,从 jdk 1.2 之后,jvm 开始使用分代的垃圾回收(generational garbage collection)。jvm 把 gc相关的内存分为年老代(tenured)和年轻代(nursery)、持久代(permanent,对应于jvm 规范的方法区)。大部分对象在刚创建时,都位于年轻代。如果某对象经历了几轮gc 还活着(大龄对象),就把它移到年老代。另外,如果某个对象在创建时比较大,可能就直接被丢到年老代。经过这种策略,使得年轻代总是保存那些短命的小对象。在空间尺寸上,年轻代相对较小,而年老代相对较大。因为有了分代技术,jvm 的 gc 也相应分为两种:主要收集(m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年java垃圾回收机制知识 2022 java 垃圾 回收 机制 知识
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内