将byte[]
存储在地图中是不好的做法
static LinkedHashMap<String, byte[]> fileBuffer = new LinkedHashMap<>()
?
卸载我的类时,profiler仍会显示持久的byte[]
内存使用情况。
最后几小时后会抛出OutOfMemoryError
。
jvm
(Oracle jdk8u121)对地图GC有偏见吗?
某些上下文 :在服务器上使用Oracle作业的动态自定义报告工具。
答案 0 :(得分:1)
我最好的选择是,你永远不会清理你的地图,或者你永远不会将ig垃圾收集起来,从收集的垃圾中预先设置垃圾。 Map对字节缓冲区有很强的参考作用,所以如果map不是GC,那么缓冲区也不行
这是不好的做法吗?不,但不好的做法是永远保存你的地图。
考虑使用WeakReference
进行缓存。
Map<String,WeakReference<byte[]>>
将允许地图值被垃圾收集,尽管地图本身不可收集。