【java】10分钟,了解GC过程

作者: free-coder分类: 校园学习 发布时间: 2019-08-03 17:59:58 浏览:54520 次

【java】10分钟,了解GC过程

光华满舒克:
讲的还是可以的,但是有一个错误。标记的应该是不被删除的,未标记的才是删除掉的,根据GCroot可达性分析,只能到达被引用中的对象,这个时候进行的标记,标记的是需要留下的对象

【回复】+1百度了好几个都是说标记的是存活对象而不是被删除对象
【回复】回复 @Mrwolf村 :可达性分析,到达不了未引用的对象,也就没办法设置null
【回复】《Java虚拟机 JVM性能调优+面试+实战》: https://www.bilibili.com/video/BV1854y1H7nR 为什么已三连,希望继续出视频,支持支持我没有QX模块344547
Polei:
面试官问了一个这样的问题,YoungGC触发时会发生什么,我回答E区和S0区存活的对象会复制到S1区,然后清理E区和S0区,下一次GC时E区和S1区存活对象会复制到S0区,以此交替(不考虑对象进入老年代)。面试官继续问:E区和S0区的所有存活对象都可以复制到S1区吗?S1区能放下这么多对象吗?E区和S0区清理是整个删除吗?素质三连给我问住了,希望UP可以看到帮帮忙回答一下。[笑哭]

【回复】当前存放存活对象的S区如果放不下对象了,会进行分配担保机制,这些多出来的对象会直接进入老年代,类似于如果你不能及时换银行贷款,担保人会替你还贷
【回复】回复 @free-coder :哈哈哈,我也是这个情况。客服娘说是old这个单词不能和区这个字连在一起,ol**[doge] 我哭啦
乆磅十伍便士:
谢谢UP主,现在的我要准备JAVA面试了。要和考官说这个GC呢,已三连支持。

隐形的稻草人666:
评论显示字数太多...,都记在这个上面啦[呲牙] https://paste.ubuntu.com/p/xVmsRCQRb5/

heisenberg11111:
从新生代晋升到老年代的阈值默认应该是15

【回复】你说的是最大值了啦,一般还要x个比率,cms算出来之后就是6了。印象中是这样,好久没看文档了,照着记忆说的[微笑]
【回复】jdk8 中-XX:MaxTenuringThreshold=threshold可 设置新生代需要经历多少次GC晋升到老年代中的最大阈值。 最大值为15。 parallel收集器的默认值为15,而CMS收集器的默认值为6。
【回复】回复 @free-coder :在哪里看文档啊
UNO天空:
up主,按照你的说法,gc回收机制 标记整理法 为什么要每删除一个就要把后面的元素往前移呢?为什么不能先把所有要回收的对象回收,然后在一次遍历堆将未回收的对象整理在一块呢? 可能我对堆这个实际的物理内存划分不是很了解,我把堆当做是一个数组,假如这个数组长度为n,如果用标记整理法每次删除一个元素就要将后面的元素往前移,这样的时间复杂度是O(n^2), 如果按照我后面的想法它的时间复杂度是O(n),可能堆在实际内存中不是一块连续的区域,只是逻辑上连续而已?堆这块内存区域使用什么数据结构管理的呢?up主求解答

【回复】应该不是标记一次就触发一次回收,有频率的
故事留到明天:
UP主,标记清除算法应该是在标记阶段根据GCRoot可达性分析算法找到存活的对象,标记的是存活对象,然后清除阶段清楚的是未标记的对象。你在视频中说的是标记阶段标记要删除的对象,清除阶段是清楚标记的对象,这里是有错误的吧。

【回复】书里说的也可以反过, 两种说法都对
努力编程的小猪:
常量池和方法区对应的元数据区域,是否也会进行垃圾清理呢?

【回复】元空间不在堆上,但也需要gc,比如一直创建代理类,就会塞爆元空间。可以通过jvm参数限制元大小,快满时也会清理。参考https://www.baeldung.com/java-permgen-metaspace
独孤一帆:
学习了,很精辟,10分钟顶其他视频好几个小时。

星期天在北极种太阳:
UP讲的很好,之前看书一直看不进去的同学可以把这个视频当做一个引子

可恶的是否:
md,我早两年看到这个视频找工作就不会那么困难了,呜呜呜,现在还来的及[大哭]

唐胖_nicktang:
不错,娓娓道来 ,就喜欢这样的讲授方式,我也喜欢这样给别人讲

Crazyxia之星:
UP主讲的太好了,看了这么多视频。就看这个视频明白了[藏狐]

这世界的第一个我:
感谢老师,看了很多您的视频,受益匪浅[给心心]

垃圾回收 java gc jvm

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!