當我測試在tomcat中部署的應用程序時,應用程序被掛起。我並排運行visualvm。在應用程序掛起期間,我在visualvm中看到垃圾回收正在進行。我理論上已經讀過,當垃圾收集開始工作時,由於應用程序線程在那段時間停止,系統停止。我想清楚地知道在java中垃圾收集器和性能命中
其他開發人員如何處理這種情況?
如何在不影響系統性能的情況下以有效的方式處理它?
它可以被認爲是內置的固有屬性還是可以有其他有效的解決方案?。
因爲JVM可以配置不同的垃圾收集器算法,但在某些時候它必須運行。如果我的理解錯了,請糾正我。
這是不正確的。當程序在JVM中運行以回收不再存在引用的對象時,垃圾回收器的功能*。如果您的應用程序在運行時掛起,則我懷疑機器上存在資源可用性問題。 – CBass 2013-05-01 15:35:38
取決於,在大多數情況下,如果GC嚴重干擾性能,則代碼更可能成爲問題,而不是GC。所以我首先要看的是GC在做什麼以及爲什麼。這是一個巨大的話題,開始閱讀你的GC如何工作。通常這只是糟糕的終身管理,即保留一些你不再需要的東西。 – 2013-05-01 15:40:26
垃圾收集器正在不同的線程上運行(與機器上的所有應用程序一樣)。如果您擁有單個處理器機器,那麼處理器會切換線程(以及正在運行的其他進程的線程)之間的上下文,這會導致速度下降,但這是CPU速度,可用性和內存的函數。您可以使GC的優先級較低,但這隻會導致垃圾內存堆積,並進一步降低性能。 – CBass 2013-05-01 15:41:38