Re: [问题] JAVA创立物件与方法回传值问题

楼主: LPH66 (-6.2598534e+18f)   2014-05-10 23:26:24
※ 引述《iammarsman ( )》之铭言:
: 感谢板大的回复~~
: 想请教一下关于第一种情况,
: 小弟印象中当new了一个物件,
: JVM会在heap中配置该物件所需的内存,
: 如果有变量承接, 则会将该物件的内存位址传给该变量,
: 所以像这种没有变量承接的情况,
: 是否有可能会造成该内存区块无法被参考到,
: 进而导致系统效能低落呢? (GC似乎也是隔一段时间才会执行)
基本上这要看设计及用途
以推文的 new TaskThread.start() 来说
由于 (没猜错他的想法的话) 这东西是产生一个 Thread 并执行
那么这个 Thread 物件本身会被系统 (精确地说是 JVM) 抓走 由它管理
类似的情形是这东西可能在底层会注册到一个特定的地方 (例如一个视窗 class)
这种的话即使最后回来时没有变量承接也无妨
因为它其实已经有被适当的管理机制给承接了 不需要使用者去管理它
如果不是这种情形的话 则确实它会在回来之后成为 GC 候选
不过倒不必担心效能低落 JVM 会在它觉得该做 GC 的时候去做 GC
这个机制还没有脆弱到被单单一个乱丢的物件给弄坏 XD
其实就算有接回来管理 最后用完时依然是以这种方式丢掉的
现有的 GC 机制本来就是应对这种方式设计 所以在这一点不必担心就是了
作者: PsMonkey (痞子军团团长)   2014-05-10 23:35:00
补:里头有东西被 reference 到,也不会被GC(应该没记错
作者: Deltaguita (伯利兹)   2014-05-10 23:48:00
GC 通常是在空闲的时候 或是内存不足的时候执行如果太多垃圾物件造成GC不断的话 的确是会影响效能
作者: iammarsman ( )   2014-05-11 01:36:00
谢谢大家的回复, 感激不尽!!

Links booklink

Contact Us: admin [ a t ] ucptt.com