2017-06-21 165 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不碰到某个内存区域 - 那么负担应该在你身上 - 因为现在你的应用程序必须自己管理。应用程序必须将事物“放入”该区域,并且必须确保在必要时将其丢弃。

相关问题