面試題:Java是如何管理內存的?
答案:Java的內存管理就是對象的分配和釋放問題。在Java中,程序員需要通過關鍵字new 為每個對象申請內存空間,所有的對象在堆中分配空間。另外,對象的釋放是有GC決定和執(zhí)行的。在Java中,內存的分配是由程序完成的。而內存的釋放室友GC完成的,這種收支兩條線的方法確實簡化了程序員的工作。但同時,它也加重了JVM的工作。這也是Java程序運行速度較慢的原因之一。因為GC為了能夠正確釋放對象,必須監(jiān)控每一個對象的運行狀態(tài),包括對象的申請、引用、被引用、賦值等,GC都需要進行監(jiān)控。
監(jiān)視對象狀態(tài)是為了更加準確、及時地釋放對象,而釋放對象的根本原則就是該對象不再被引用。
為了更好的理解GC的工作原理,我們可以將對象考慮為有向圖的頂點,將引用關系考慮為圖的有向邊,有向邊從引用者指向被引用對象。另外,每個線程對象可以作為一個圖的起始頂點,例如,大多程序從main進程開始執(zhí)行,那么該圖就是以main進程頂點開始的一棵根樹。在這個有向圖中,根頂點可達的對象都是有效對象,GC將不回收這些對象。如果某個對象與這個根頂點不可達,那么我們認為這個對象不再被引用,可以被GC回收。
更多Java知識,Java視頻,Java教程盡在動力節(jié)點Java培訓,關注動力節(jié)點官方微信,獲得一手Java面試題。