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