我想SoftReference
使用尽可能多的内存使用 s 编写缓存,只要它不会变得太低效。
尝试通过计算对象大小或通过获取一些已使用内存的近似值来估计已使用的大小JVM
是死胡同。
javadoc 甚至声明s 对内存感知缓存有好处,但是对于实现如何处理sSoftReference
没有硬性规定。我只是在谈论(版本 6.22 及更高版本和版本 7)的 Oracle 实现。JVM
SoftReference
JVM
现在我的问题(请随意回答部分,分组或以任何你喜欢的方式):
- 是否
JVM
考虑对象的最后一次访问并且只删除旧的?Javadoc 指出:Virtual machine implementations are, however, encouraged to bias against clearing recently-created or recently-used soft references.
- 当记忆变得紧张时会发生什么?
JVM
恐慌,只是吃掉所有的物体? - 是否有一个参数告诉
JVM
只吃多少才能生存(没有OOME
s)和健康生活(没有CPU只运行GC
)