【发布时间】:2013-01-07 09:48:41
【问题描述】:
有没有可靠的方法在内存满之前清空缓存? 或者根据当前可用的“实际”空闲内存(硬引用对象)更好地限制缓存?
软引用缓存不是一个好主意,因为 GC 惩罚很高,一旦达到限制,所有缓存条目都需要重新加载。
另外,runtime.freeMemory() 的值对我的目的来说也不是那么可靠,因为即使它太低,在下一个 GC 周期之后也可能有足够的可用空间,因此它不能很好地指示实际使用的内存。
我试图弄清楚每个原始时间会消耗多少内存,这样我就可以知道缓存的实际内存使用情况并对其进行限制,但找不到可靠的方法来计算出需要多少内存用于存储大小为 n 的 String 引用。
【问题讨论】:
-
没有基于字符串的
length()的可靠指标,因为不同的字符串可以共享相同的支持char[]-"This is a very long string".substring(5,2)是字符串is,但它包含一个引用到“很长”char[]。 -
这里的答案也许能给出一个想法。 stackoverflow.com/questions/13855013/…
标签: java caching memory-management garbage-collection jvm