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

2017-09-27 20:53:19 +08:00
 esolve

譬如

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

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

gc 扫描的时候

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

2305 次点击
所在节点    问与答
10 条回复
doing
2017-09-27 21:49:20 +08:00
不会。
yorTX9t
2017-09-27 22:21:52 +08:00
C++ 可以,Java 不行

{
Student stu{};
//...
}
esolve
2017-09-27 22:35:36 +08:00
@doing 是因为 stu 还在函数栈吗?那函数结束的时候就可以被回收了吧
arrow2015
2017-09-27 22:41:58 +08:00
关键是怎么做验证 (我不会 🤔)
verrickt
2017-09-27 23:22:28 +08:00
@esolve 这个跟 Gc 的具体实现有关。你可以去知乎查下 R 大。R 大有篇回答讲的很详细
rosu
2017-09-27 23:30:37 +08:00
歪个楼,确定不是 == 吗?
x7395759
2017-09-28 00:03:56 +08:00
推荐书籍,深入理解 jvm 虚拟机
honeycomb
2017-09-28 01:53:39 +08:00
@esolve system.gc() + 断点?
虽然前者并不保证一定会跑一次 gc
而且可能还要像楼上说的那样把几种不同的 gc 都试一下
mifly
2017-09-28 10:08:53 +08:00
@esolve 如果那么希望自己管理内存,不应该用 Java,而是用 c,c++等更底层的

目前 Java 是不提供直接操作内存的 API 给你用的,不是你想释放内存就能释放内存,这个是由 GC 来做的,你不用管,当然也是要注意代码的写法,避免内存不足的问题。你是从其他语言过来的吧,建议先看下 Java 的设计思想,解决的问题
lslqtz
2017-09-28 20:51:55 +08:00
c#好像会

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

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

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

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

© 2021 V2EX