JVM GC将对象降级到eden空间



我猜这是不可能的。。。但现在开始了。我的理解是,伊甸园空间比旧一代空间更便宜,尤其是当你开始进入非常大的堆时。大堆往往会产生长时间运行的应用程序(服务器应用程序),而服务器应用程序很多时候都想使用某种缓存。具有某种逐出(LRU)的缓存往往会挫败GC所做的一些假设(临时对象很快就会消亡)。因此,缓存驱逐最终会以比你想要的更快的速度填满旧一代,并且最终会产生更昂贵的旧一代收集。

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

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

在任何情况下,它都会打破一些限制,从某种意义上说,eden空间很容易被垃圾收集,从而负责删除使用寿命短的项目。如果一个对象存活了足够的时间,那么它就必须被移动到其他地方,这就像试图违反GC本身强加的规则,而这在Java中是不容易获得的。。