自動化GC的一個優(yōu)點是開發(fā)人員不需要真正了解它是如何工作的。不幸的是,這意味著許多開發(fā)人員不了解它是如何工作的。了解垃圾收集和許多可用的GC,有點像了解Linux
CLI命令。從技術上講,你不需要使用它們,但是了解并習慣使用它們會對你的生產(chǎn)力產(chǎn)生重大影響。想要了解有關GC的更多知識,可以報名參加java培訓來學習,在專業(yè)老師的教學指導下,你可以很快掌握GC使用技能。
與CLI命令一樣,有一些絕對的基礎。ls命令查看父文件夾中的文件夾列表,mv命令將文件從一個位置移動到另一個位置,等等。在GC中,這些命令相當于知道有多個GC可供選擇,并且GC可能會導致性能問題。當然,還有很多東西需要學習(關于使用Linux
CLI和垃圾收集)。
學習Java的垃圾收集過程的目的是為了學習如何有效地實現(xiàn)和維護適合你特定環(huán)境的具有最佳性能的正確GC。了解垃圾收集會影響應用程序性能是最基本的,有許多高級技術可以提高GC性能并減少其對應用程序可靠性的影響。
GC性能問題
1.內存泄漏
通過了解堆結構和垃圾收集的執(zhí)行方式,我們知道內存使用量會逐漸增加,直到發(fā)生垃圾收集事件并且使用量下降為止。被引用對象的堆利用率通常保持穩(wěn)定,因此丟棄的卷應該大致相同。在java培訓中,會有關于垃圾回收的處理方法和技巧的課程,學好這些技巧,有助于更好地進行開發(fā)項目,少出問題。
在內存泄漏的情況下,每個GC事件都會清除一小部分堆對象(盡管留下的許多對象未被使用),因此堆利用率將繼續(xù)增加,直到堆內存已滿,并引發(fā)OutOfMemoryError異常,原因是GC只將未引用的對象標記為刪除,因此,即使引用的對象不再使用,它也不會從堆中清除。
2.持續(xù)的“Stop the World”事件
在某些場景中,垃圾收集可以調用Stop the
World事件,因為當它發(fā)生時,JVM中的所有線程(以及在其上運行的應用程序)都將停止,以允許GC執(zhí)行。在健康的應用程序中,GC執(zhí)行時間相對較短,對應用程序性能影響不大。
但是,在不太理想的情況下,Stop the World事件可能會極大地影響應用程序的性能和可靠性。如果GC事件需要Stop
the
World暫停并需要2秒鐘執(zhí)行,則該應用程序的最終用戶將在運行該應用程序的線程停止以允許GC時經(jīng)歷2秒鐘的延遲。通過java培訓學習,可以幫助你更好地了解垃圾回收相關問題,提高代碼質量。
當內存泄漏發(fā)生時,連續(xù)Stop the
World事件也是有問題的。由于每次執(zhí)行GC都會清除較少的堆內存空間,因此剩余內存填滿所需的時間更短。當內存已滿時,JVM會觸發(fā)另一個GC事件。最終,JVM將反復運行Stop
the World事件,從而引起重大性能問題。
3.CPU使用率
這一切都取決于CPU的使用。連續(xù)GC/Stop the
World事件的一個主要癥狀是CPU使用量激增。GC是一個計算量很大的操作,因此可能需要占用更多的CPU資源。對于運行并發(fā)線程的GC,CPU使用率甚至更高。為您的應用程序選擇正確的GC將對CPU使用產(chǎn)生最大的影響,但也有其他方法可以在這方面優(yōu)化以獲得更好的性能。
我們可以從圍繞垃圾收集的這些性能問題中了解到,無論GCs系統(tǒng)變得多么先進(而且越來越先進),它們的致命弱點仍然是一樣的:冗余和不可預測的對象分配。要提高應用程序性能,選擇正確的GC是不夠的。我們需要知道這個過程是如何工作的,我們需要優(yōu)化我們的代碼,這樣我們的GCs就不會占用過多的資源,或者在我們的應用程序中造成過多的暫停。Java培訓課程,可以讓你學習更多的內存管理技巧,寫出高質量和已與維護的代碼!