![]() |
1
3
如果软/弱引用是不可能的,那么我会看到两个(非常重要的)选项: 1)使用Java工具来检查添加到映射中的项的实际大小。仪表接口提供 "shallow" size 对于一个对象,您将需要更多的代码来探索引用(并避免计算重复项!). Here 是计算一个对象的深度大小的解决方案。 2)使用jmx跟踪gcs之后的堆大小,并在达到某个危险阈值时更改映射行为。请参阅中的“通知”部分 MemoryMXBean javadoc . |
![]() |
2
2
地图本身只包含固定大小的条目,其中包含对地图中“包含”的实际对象的引用。您将需要覆盖所有映射转换方法(即
|
![]() |
3
1
正如其他人提到的,您可以使用代理检测来完成这项工作。sizeof项目为这种方法提供了一个方便的实用程序。这可以与ConcurrentLinkedHashMap的加权值概念一起使用,在加权值概念中,加权器决定一个值消耗多少容量单位。这样,除了传统的最大条目数约束之外,缓存还可以正确处理集合或内存限制。 如果您希望被堆绑定,那么有一个concurrentlinkedHashMap早期版本的分叉可以做到这一点。它保留了原始版本的Apache许可证,因此可以根据您的需要进行调整,因为它与伏地魔打包在一起。 http://sizeof.sourceforge.net/ |
![]() |
4
0
你可以包装一个
|
|
user29759326 · 如何返回递归函数中的最后一个值? 4 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 4 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 4 月前 |
![]() |
rudraraj · java中未声明最终变量 5 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 5 月前 |