在一种方法中,我从邻接列表创建一个序列化文件,我试图用另一种方法读取如下:
D TblAryDs DS qualified dim(9999)
D tblName 3
D tblElement 10
D tblDivision 5
D tblRes 2
//Not Sure How to do the below lookup
idx = %lookup(tblName:TblAryDs(*).tblName) && %lookup(tblElement:TblAryDs(*).tblElement) && %lookup(tblDivision:TblAryDs(*).tblDivision);
if idx > *zeros;
return TblAryDs(*).tblRes;
endif;
现在,虽然文件本身大约500MB,但我得到了一个 OOM:Java堆空间错误,即使我将堆大小增加到2000MB,但是它再次适用于6000MB的堆。
我想知道,为什么相同的信息在内存中占用的空间比在硬盘上占用的空间多?
答案 0 :(得分:1)
这是一个非常粗略的路径。这样您就可以了解计算机在加载文件时的作用。这不是100%准确,实际过程可能会有所不同,效率更高,这只是为了说明为什么计算机需要这么多内存。
所以总计达到了3650.01mb。
然后垃圾收集器在某个时刻到来并清理了一塌糊涂,你剩下大约400mb。