V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lxbjkben
V2EX  ›  程序员

Java 主动 GC 功能

  •  
  •   lxbjkben · Jun 21, 2018 · 4868 views
    This topic created in 2876 days ago, the information mentioned may be changed or developed.
    在厂里上班时候撸了一个根据 old gen 百分比在特定时间段触发 cms gc 的的小功能,simple yet useful : )
    https://github.com/vipshop/vjtools/issues/39
    Supplement 1  ·  Jun 26, 2018

    线上使用的实际效果: proactive gc task result

    26 replies    2018-07-03 19:33:07 +08:00
    metrxqin
        1
    metrxqin  
       Jun 21, 2018
    你确定真的有必要?
    neoblackcap
        2
    neoblackcap  
       Jun 21, 2018
    其实我觉得你们需要换 GC 算法,毕竟 G1 的回收已经很快了,听说下一代也要学 Azual,搞 pauseless gc,垃圾回收可以在 heap 上 T 的时候低至 10ms,不需要人工接入。
    ShineSmile
        3
    ShineSmile  
       Jun 21, 2018
    面试的时候面试官说 java 的 GC 是引用计数
    是真的么?
    那遇到循环引用可咋办。
    dbpe
        4
    dbpe  
       Jun 21, 2018
    @ShineSmile 说明那个面试官,没去了解 java 的 gc 机制。。现代化的虚拟机 gc 算法都是路径是否可达的方式来的。

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

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

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

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

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

    我们业务高峰发生 GC 就是一大堆超时, 一般会在低峰期定时去 GC 躲开高峰期的 GC 行为
    rim99
        16
    rim99  
       Jun 22, 2018 via iPhone
    先码一下。
    cms 不是本来就要指定 old gen 百分比来触发 gc 么?
    CYKun
        17
    CYKun  
       Jun 22, 2018 via Android
    挑个刺:阀值→阈值
    balamiao
        18
    balamiao  
       Jun 22, 2018
    @ShineSmile 引用计数,呵呵了

    可达路径分析了解一下~
    ShineSmile
        19
    ShineSmile  
       Jun 22, 2018
    @seancheer 能举个例子么?
    ShineSmile
        20
    ShineSmile  
       Jun 22, 2018
    @seancheer 算了 大家各自自以为是吧
    不是研究 PL 的 也不想撕
    lxbjkben
        21
    lxbjkben  
    OP
       Jun 26, 2018
    @yanaraika 3500 刀一个 vm,只有不差钱的金融行业用的起吧。
    lxbjkben
        22
    lxbjkben  
    OP
       Jun 26, 2018
    @rim99 在安全时间内尝试主动触发,避免峰值流量时候 gc 造成停顿。
    lxbjkben
        23
    lxbjkben  
    OP
       Jun 26, 2018
    @neoblackcap G1 只有大堆会减少超长 GC,小堆没区别。
    ShineSmile
        25
    ShineSmile  
       Jun 27, 2018
    @dbpe 哈哈哈
    刚在 V2EX 看到那个公司的软文 2333333333
    seancheer
        26
    seancheer  
       Jul 3, 2018
    @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 同样的操作和这里的结果是一样的。
    }
    ``
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1040 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 18:42 · PVG 02:42 · LAX 11:42 · JFK 14:42
    ♥ Do have faith in what you're doing.