3 回答

TA貢獻1827條經(jīng)驗 獲得超4個贊
如果您具體詢問為什么JavaClass
對象未被 GC 處理。它可能是(取決于 VM 參數(shù))。
如果您問為什么該對象生成的線程繼續(xù)運行,那是因為它創(chuàng)建了一個新線程Thread
并運行它。這只會在run()
方法正常完成或被System.exit()
調(diào)用時完成。

TA貢獻1820條經(jīng)驗 獲得超3個贊
您調(diào)用了startCustomThread
兩次方法,因此啟動了 2 個線程。
來自Thread
文檔:
Java 虛擬機繼續(xù)執(zhí)行線程,直到發(fā)生以下任一情況:
已調(diào)用 Runtime 類的退出方法,安全管理器已允許執(zhí)行退出操作。
所有不是守護線程的線程都已死亡,要么是從對 run 方法的調(diào)用返回,要么是拋出一個傳播到 run 方法之外的異常。
這些選項均不適用于您的情況,因此該線程仍然存在。這與垃圾收集無關(guān)。

TA貢獻1880條經(jīng)驗 獲得超4個贊
該行clazz = new JavaClass();
只是將新對象分配給您的本地引用,并且不會破壞該引用所引用的先前創(chuàng)建的對象。此行不保證對象被垃圾收集。
此外,對象的垃圾回收不一定與線程的生命周期相關(guān)——您的線程可能會被中斷或完成其執(zhí)行,但對象仍可能存在于堆中并正在等待 GC。
添加回答
舉報