2017-06-21 132 views
0

在我們的許多現代應用程序中,使用緩存來提高應用程序的性能。現在這個緩存可能是一些GB的大小。 但是,將此緩存與當前的JVM一起使用可能會由於GC週期和全部而導致巨大的性能問題。爲什麼Java中沒有內存區域沒有gc發生?

所以我的問題是爲什麼不提供一個簡單的方法來使用GC內不會發生的堆內部的一些空間。

存在堆堆存儲形式的一些解決方案,但它有自己的缺點,如ser/der對象。

是否有任何特別的原因不提供這個空間。 或者我在這裏問一些可怕的錯誤。

+0

爲什麼緩存會導致GC循環,如果它被分配和引用? – RealSkeptic

+0

標記部分在大型JVM中佔用大量時間 –

+0

無論如何,世代垃圾收集器通常不會觸及這樣的內存,除非內存不足需要主要的gc。如果內存不足,禁止gc將意味着失敗。無論哪種情況,唯一的修復方法就是增加更多的內存。 – Holger

回答

0

您可能正在談論sun.misc.Unsafe

這個特性實際上允許你編寫你想要的方向的Java代碼。在灰色地帶經過多年之後,足以成爲Java9的官方部分。

但要回答你的直接問題:你認爲這應該如何工作?你不能擁有蛋糕,也不可能擁有同一點。

當你離開的內存區域是由JVM管理,那麼JVM 必須做垃圾回收。如果某些內存區域中的某些東西變得合法收集,它需要消失。換句話說:如果你希望JVM不碰到某個內存區域 - 那麼負擔應該在你身上 - 因爲現在你的應用程序必須自己管理。應用程序必須將事物「放入」該區域,並且必須確保在必要時將其丟棄。

相關問題