我猜这不是possible...but来了。我的理解是,收集伊甸园空间比收集旧的gen空间更便宜,特别是当你开始进入非常大的堆的时候。大型堆往往会出现长时间运行的应用程序(服务器应用程序),而服务器应用程序在很多时候都希望使用某种类型的缓存。带有某种逐出的缓存(LRU)倾向于推翻GC所做的一些假设(临时对象很快就会死亡)。因此,缓存回收最终会以比您希望的更快的速度填满旧gen,最终导致成本更高的旧gen收集。
现在,如果java提供了一种将引用标记为即将死亡(delete关键字)的方法,这类事情似乎可以避免。这与c++的不同之处在于使用是可选的。调用delete实际上并不会删除对象,而是暗示GC应该将对象降级回Eden空间(在那里它将更容易被收集)。我猜这个特性是不存在的,但是,为什么不呢(这是个坏主意吗)?
发布于 2012-03-24 13:24:16
实际上,伊甸园空间是在其中新创建对象的内存区。一旦一个对象离开了eden空间,它就不能再被放在那里,那么Java的GC实现是如此不透明,以至于通常没有太多事情可做。
它在任何情况下都会打破一些限制,伊甸园空间很容易被垃圾收集,从某种意义上说,它会小心地删除寿命短的项目。如果一个对象存活了足够长的时间,那么它就必须被转移到其他地方,这就像是试图违背GC本身强加的规则,而这在Java中是永远不容易获得的。
https://stackoverflow.com/questions/9849357
复制相似问题