V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rizon
V2EX  ›  程序员

Java gcroots 到底是啥?为什么作用域结束后对象会被回收

  •  
  •   rizon ·
    othorizon · 2019-02-21 13:30:14 +08:00 · 1685 次点击
    这是一个创建于 1890 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个 for 循环中的强引用对象 String a=new String("") 在 for 循环结束后会被回收吧?
    是 for 循环全部结束,还是当前循环结束就算了?

    但是这个是基于哪个理论基础的,,查了好久资料没看到哪里提到了作用域和垃圾回收之间的关系。
    java 中没有被 gcroots 引用的对象就会被回收,那到底谁是 gcroots。。为啥离开作用域就会被回收?

    2 条回复    2019-02-21 20:02:57 +08:00
    fkdog
        1
    fkdog  
       2019-02-21 15:05:46 +08:00
    回收的话应该是会在所有线程到达 safepoint 点的时候再进行回收操作的。
    作用域结束以后,作用域内的对象不可被作用域外部访问而已
    cyspy
        2
    cyspy  
       2019-02-21 20:02:57 +08:00
    只能保证作用域内不被回收(否则程序就崩了),但不保证离开就一定会被回收。GCRoots 包括栈、static、常量、native 方法,不被这些引用的你代码里也不可能访问到了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1598 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:02 · PVG 01:02 · LAX 10:02 · JFK 13:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.