我一直在使用Java中的大型日志文件(~100 MB)并注意到gzip
可以将它们压缩到大约3 MB左右,使它们缩小35倍。
所以我想知道:在将文件加载到内存之前,现代操作系统会压缩文件吗?使用100 MB的RAM来保存一个真正只有3 MB信息的文件似乎很愚蠢。
或者相反?读取文件(以及处理编码和诸如此类)的过程是否意味着磁盘上占用100MB的文件实际上大于内存中的100MB?
*奖励积分:任何预处理建议我都可以在加载之前对我的文件进行处理,以减少JVM
的内存使用量? (这些文件的格式与Apache
服务器日志的格式相同。)
答案 0 :(得分:0)
现代操作系统在将文件加载到内存之前是否压缩文件?使用100 MB的RAM来保存一个真正只有3 MB信息的文件似乎很愚蠢。
这取决于所涉及的申请。某些应用程序可能压缩内存中保存的数据,而其他应用程序可能不会。
或者相反?读取文件(以及处理编码和诸如此类)的过程是否意味着磁盘上占用100MB的文件实际上大于内存中的100MB?
同样,完全取决于应用程序。
*奖励积分:任何预处理建议我可以在加载之前对我的文件进行处理,以减少我的JVM的内存使用量? (这些文件的格式与Apache服务器日志的格式相同。)
不要将任何数据加载到您不需要处理或显示的内存中。产生平均值或总和所需的任何东西都可以临时加载并添加到运行总计中,然后可以丢弃。
答案 1 :(得分:0)
你只得到你要求的东西。如果你压缩它,它将被压缩。 大多数情况下,内存大小和磁盘大小之间会略有不同。但这只是因为磁盘(扇区)上的存储单元更大。即使对于1字节文件,您大多数时间使用的文件多于磁盘上的文件,因为操作系统会为此保留一个扇区,它将取决于操作系统,您将主要找到512,2048或4096字节的扇区。