Java 主动 GC 功能

2018-06-21 12:51:16 +08:00
 lxbjkben
在厂里上班时候撸了一个根据 old gen 百分比在特定时间段触发 cms gc 的的小功能,simple yet useful : )
https://github.com/vipshop/vjtools/issues/39
4379 次点击
所在节点    程序员
26 条回复
metrxqin
2018-06-21 15:09:57 +08:00
你确定真的有必要?
neoblackcap
2018-06-21 15:17:44 +08:00
其实我觉得你们需要换 GC 算法,毕竟 G1 的回收已经很快了,听说下一代也要学 Azual,搞 pauseless gc,垃圾回收可以在 heap 上 T 的时候低至 10ms,不需要人工接入。
ShineSmile
2018-06-21 15:24:53 +08:00
面试的时候面试官说 java 的 GC 是引用计数
是真的么?
那遇到循环引用可咋办。
dbpe
2018-06-21 15:58:44 +08:00
@ShineSmile 说明那个面试官,没去了解 java 的 gc 机制。。现代化的虚拟机 gc 算法都是路径是否可达的方式来的。

计数器的方式。。远古的虚拟机好像也没有用这种方式的。。
ren2881971
2018-06-21 16:11:38 +08:00
从没主动回收过。。
yanaraika
2018-06-21 16:22:47 +08:00
现在一堆公司问 /搞 JVM 调优就不会花 3500 刀买个 Azul Zing JVM? 况且很多时候面试官和被面试者的理解都是错的

总之不到万不得已不要搞跨层优化,底层一变就成了负优化
wwqgtxx
2018-06-21 16:28:36 +08:00
@dbpe 直到现在 CPython 还在用引用计数呢,貌似也 并不 远古
xeaglex
2018-06-21 16:32:23 +08:00
@dbpe C++智能指针用的是计数器
dbpe
2018-06-21 16:38:22 +08:00
@xeaglex
@wwqgtxx
好吧。。我孤陋寡闻了
micean
2018-06-21 16:41:10 +08:00
自己塞满内存去触发 GC 完全没有必要吧
copie
2018-06-21 16:46:16 +08:00
@ShineSmile Python 使用的是引用计数。处理循环引用使用标记-清除。为了加速使用了分代回收。虽然简单但是有效。
DRcoding
2018-06-21 17:20:02 +08:00
Start 还挺多的,不过反正我是不敢在线上用这玩意。。。。
ShineSmile
2018-06-21 18:09:56 +08:00
@dbpe
是一次糟糕的面试体验
不过最终也没选中我
因为我是搞.NET 的(逃

只是想吐槽现在好多做技术的人云亦云,照本宣科
而且有的书的内容还是错的

歪楼
还有典型的:作为参数传递时:值类型不可以修改,而引用类型“可以修改“
实际上都不能改,因为分别传的是值的副本和引用的副本。
看到书上修改引用类型对象的属性,就认为引用类型“可改”。
实际上原引用和引用的副本都指向同一个对象。
所以属性是更新是有效的。

当然,
C#还可以用 ref 啊 out 啊来传递引用本身。
java 还真太清楚……
seancheer
2018-06-21 20:04:21 +08:00
@ShineSmile
java 只有值传递,没有引用传递。
就像你说的,很多人把引用和引用副本指向同一个对象错误的理解成了引用传递。
Raymon111111
2018-06-21 22:28:31 +08:00
这个思路当然有用

我们业务高峰发生 GC 就是一大堆超时, 一般会在低峰期定时去 GC 躲开高峰期的 GC 行为
rim99
2018-06-22 07:52:34 +08:00
先码一下。
cms 不是本来就要指定 old gen 百分比来触发 gc 么?
CYKun
2018-06-22 08:31:51 +08:00
挑个刺:阀值→阈值
balamiao
2018-06-22 11:50:28 +08:00
@ShineSmile 引用计数,呵呵了

可达路径分析了解一下~
ShineSmile
2018-06-22 12:38:11 +08:00
@seancheer 能举个例子么?
ShineSmile
2018-06-22 12:41:12 +08:00
@seancheer 算了 大家各自自以为是吧
不是研究 PL 的 也不想撕

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/464693

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX