Java在Web应用程序的静态Map中存储byte [] - OutOfMemoryError

时间:2017-05-13 16:44:48

标签: java

byte[]存储在地图中是不好的做法

static LinkedHashMap<String, byte[]> fileBuffer = new LinkedHashMap<>()

卸载我的类时,profiler仍会显示持久的byte[]内存使用情况。

最后几小时后会抛出OutOfMemoryError

jvm(Oracle jdk8u121)对地图GC有偏见吗?

某些上下文 :在服务器上使用Oracle作业的动态自定义报告工具。

1 个答案:

答案 0 :(得分:1)

我最好的选择是,你永远不会清理你的地图,或者你永远不会将ig垃圾收集起来,从收集的垃圾中预先设置垃圾。 Map对字节缓冲区有很强的参考作用,所以如果map不是GC,那么缓冲区也不行

这是不好的做法吗?不,但不好的做法是永远保存你的地图。

考虑使用WeakReference进行缓存。

Map<String,WeakReference<byte[]>>将允许地图值被垃圾收集,尽管地图本身不可收集。