3 回答

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

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

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