2 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
可以設(shè)計(jì)優(yōu)化程序的轉(zhuǎn)換,以減少可達(dá)到的對(duì)象的數(shù)量,使其少于可以被認(rèn)為可達(dá)的對(duì)象的數(shù)量。例如,Java編譯器或代碼生成器可以選擇設(shè)置將不再用于null的變量或參數(shù),以使得此類對(duì)象的存儲(chǔ)可能更快地被回收。
所以,是的,我認(rèn)為這是允許的編譯器添加隱藏代碼設(shè)置a
到null
,從而使其能夠進(jìn)行垃圾回收。如果發(fā)生了這種情況,您可能無法從字節(jié)碼中分辨出來(請(qǐng)參閱@ user2357112的評(píng)論)。
可能(丑陋)的解決方法:添加public static boolean alwaysFalse = false;
到主類或其他類,然后在最后main()
添加if (alwaysFalse) System.out.println(a);
或引用的其他內(nèi)容a
。我不認(rèn)為優(yōu)化器可以確定alwaysFalse
永遠(yuǎn)不會(huì)設(shè)置(因?yàn)槟承╊惪偸强梢允褂梅瓷鋪碓O(shè)置它); 因此,它無法分辨出a
不再需要它。至少,這種“解決方法”可用于確定這是否確實(shí)是問題。
添加回答
舉報(bào)