esolve
V2EX  ›  问与答

Java : 一个代码块结束后,代码块内部引用的内存会被回收吗?

  •  
  •   esolve · Sep 27, 2017 · 3524 views
    This topic created in 3325 days ago, the information mentioned may be changed or developed.

    譬如

    if(flag=true){
        Student stu = new Student();
        ...
        ...
    }
    

    上面 if 代码块结束后,整个函数结束前

    gc 扫描的时候

    这里 stu 指向的对象会被回收吗?

    10 replies  •  2017-09-28 20:51:55 +08:00
    doing
    doing
    Sep 27, 2017
    1
    不会。
    yorTX9t
    yorTX9t
    Sep 27, 2017
    2
    C++ 可以,Java 不行

    {
    Student stu{};
    //...
    }
    esolve
    esolve
    OP
    Sep 27, 2017 via iPhone
    3
    @doing 是因为 stu 还在函数栈吗?那函数结束的时候就可以被回收了吧
    arrow2015
    arrow2015
    Sep 27, 2017 via Android
    4
    关键是怎么做验证 (我不会 🤔)
    KasaneTeto
    KasaneTeto
    Sep 27, 2017 via Android
    5
    @esolve 这个跟 Gc 的具体实现有关。你可以去知乎查下 R 大。R 大有篇回答讲的很详细
    rosu
    rosu
    Sep 27, 2017 via Android❤️1
    6
    歪个楼,确定不是 == 吗?
    quickma
    quickma
    Sep 28, 2017
    7
    推荐书籍,深入理解 jvm 虚拟机
    honeycomb
    honeycomb
    Sep 28, 2017 via Android
    8
    @esolve system.gc() + 断点?
    虽然前者并不保证一定会跑一次 gc
    而且可能还要像楼上说的那样把几种不同的 gc 都试一下
    mifly
    mifly
    Sep 28, 2017 via iPhone
    9
    @esolve 如果那么希望自己管理内存,不应该用 Java,而是用 c,c++等更底层的

    目前 Java 是不提供直接操作内存的 API 给你用的,不是你想释放内存就能释放内存,这个是由 GC 来做的,你不用管,当然也是要注意代码的写法,避免内存不足的问题。你是从其他语言过来的吧,建议先看下 Java 的设计思想,解决的问题
    lslqtz
    lslqtz
    Sep 28, 2017
    10
    c#好像会
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2879 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 12:17 · PVG 20:17 · LAX 04:17 · JFK 07:17
    ♥ Do have faith in what you're doing.