在厂里上班时候撸了一个根据 old gen 百分比在特定时间段触发 cms gc 的的小功能,simple yet useful : )
https://github.com/vipshop/vjtools/issues/39
https://github.com/vipshop/vjtools/issues/39
线上使用的实际效果:
|
metrxqinJun 21, 2018
1
你确定真的有必要?
|
|
neoblackcapJun 21, 2018
2
其实我觉得你们需要换 GC 算法,毕竟 G1 的回收已经很快了,听说下一代也要学 Azual,搞 pauseless gc,垃圾回收可以在 heap 上 T 的时候低至 10ms,不需要人工接入。
|
|
ShineSmileJun 21, 2018
3
面试的时候面试官说 java 的 GC 是引用计数
是真的么? 那遇到循环引用可咋办。 |
|
dbpeJun 21, 2018
4
|
|
ren2881971Jun 21, 2018
5
从没主动回收过。。
|
|
yanaraikaJun 21, 2018 via Android
6
现在一堆公司问 /搞 JVM 调优就不会花 3500 刀买个 Azul Zing JVM? 况且很多时候面试官和被面试者的理解都是错的
总之不到万不得已不要搞跨层优化,底层一变就成了负优化 |
|
miceanJun 21, 2018
10
自己塞满内存去触发 GC 完全没有必要吧
|
|
copieJun 21, 2018 via Android
11
@ShineSmile Python 使用的是引用计数。处理循环引用使用标记-清除。为了加速使用了分代回收。虽然简单但是有效。
|
|
12
Start 还挺多的,不过反正我是不敢在线上用这玩意。。。。
|
|
ShineSmileJun 21, 2018
13
|
|
seancheerJun 21, 2018
14
|
|
Raymon111111Jun 21, 2018
15
这个思路当然有用
我们业务高峰发生 GC 就是一大堆超时, 一般会在低峰期定时去 GC 躲开高峰期的 GC 行为 |
|
F7EXi3C25zGhO40bJun 22, 2018 via iPhone
16
先码一下。
cms 不是本来就要指定 old gen 百分比来触发 gc 么? |
|
CYKunJun 22, 2018 via Android
17
挑个刺:阀值→阈值
|
|
balamiaoJun 22, 2018
18
|
|
ShineSmileJun 22, 2018
19
@seancheer 能举个例子么?
|
|
ShineSmileJun 22, 2018
20
@seancheer 算了 大家各自自以为是吧
不是研究 PL 的 也不想撕 |
|
23
@neoblackcap G1 只有大堆会减少超长 GC,小堆没区别。
|
|
24
|
|
ShineSmileJun 27, 2018
25
@dbpe 哈哈哈
刚在 V2EX 看到那个公司的软文 2333333333 |
|
seancheerJul 3, 2018
26
@ShineSmile 不好意思,才看到。举个 c 里面的例子
``c struct S_YourStruct{ int age; } typedef struct S_YourStruct YourStruct; void main() { YourStruct* p = (YourStruct*)malloc(sizeof(YourStruct )); //不判断有没有申请成功了 memset(p,0,sizeof(YourStruct)); p->age = 11; func(p); } void func(YourStruct * p) { p->age = 100; //这里修改也会在 main 中的 p 生效,因为指针都指向同一个对象 p = (YourStruct*)malloc(sizeof(YourStruct )); //修改了 p 指针的指向,但是 main 中的 p 没有受到影响,对于指针本身来讲,实际上是 [值传递] ,而并非 [引用传递] ,Java 里面也是同样的道理,本质上都是 [值传递] ,Java 同样的操作和这里的结果是一样的。 } `` |