JVM GC将对象降级为伊甸园空间?

时间:2012-03-24 05:17:28

标签: java garbage-collection jvm

我猜这不可能......但是这里有。我的理解是,伊甸园的空间收集比旧的空间更便宜,特别是当你开始进入非常大的堆时。大堆往往会提出长时间运行的应用程序(服务器应用程序)和服务器应用程序,很多时候想要使用某种缓存。具有某种驱逐(LRU)的缓存往往会破坏GC所做的一些假设(临时对象快速死亡)。因此,缓存驱逐最终会比你想要的更快地填满旧版本,并最终得到更昂贵的旧版本。

现在,如果java提供了一种将引用标记为即将死亡(删除关键字)的方法,似乎可以避免这种事情?这和c ++之间的区别在于使用是可选的。调用delete实际上并不删除对象,而是向GC提示它应该将对象降级回Eden空间(它将更容易收集)。我猜这个功能不存在,但是,为什么不存在(这是一个坏主意的原因)?

1 个答案:

答案 0 :(得分:1)

实际上,伊甸园空间是新创建对象的内存区域。一旦一个对象离开eden空间就不能再放在那里了,那么Java的GC实现是非常不透明的,通常没什么可做的。

在任何情况下它都会打破一些限制,伊甸园空间很容易被垃圾收集,从而保持去除寿命短的物品。如果一个对象在足够的时间内存活,那么它必须被移动到其他地方,这就像试图违反GC本身强加的规则一样,这在Java中是不容易获得的。