【问题标题】:Are files in memory the same size as they are in the file system?内存中的文件是否与文件系统中的文件大小相同?
【发布时间】:2015-10-27 14:32:28
【问题描述】:

我一直在使用 Java 处理大型日志文件(约 100 MB),并注意到 gzip 可以将它们压缩到约 3MB,使它们缩小 35 倍。

所以我想知道:现代操作系统会在将文件加载到内存之前对其进行压缩吗?使用 100 MB 的 RAM 来保存实际上只有 3 MB 信息的文件似乎很愚蠢。

还是相反?读取文件(以及处理编码等)的过程是否意味着占用磁盘 100MB 的文件实际上大于内存中的 100MB?

*加分:在加载文件之前我可以对文件进行预处理以减少我的JVM 的内存使用量有什么建议吗? (文件格式与Apache 服务器日志格式相同。)

【问题讨论】:

  • 如果您将压缩数据保存在内存中,那么您必须在任何时候想要使用该数据时执行解压缩。要么,要么更改您的代码以处理压缩数据,这似乎非常压倒性且不必要。无论哪种方式,如果您想使用数据,则必须在某个时候将其解压缩为其原始形式,除非您不打算操作/访问该数据的某些部分。你有什么问题?

标签: java file memory centos filesystems


【解决方案1】:

现代操作系统会在将文件加载到内存之前对其进行压缩吗?使用 100 MB 的 RAM 来保存实际上只有 3 MB 信息的文件似乎很愚蠢。

这取决于所涉及的应用程序。一些应用程序可能会压缩内存中保存的数据,而其他应用程序可能不会。

还是相反?读取文件(以及处理编码等)的过程是否意味着占用磁盘 100MB 的文件实际上大于内存中的 100MB?

同样,完全取决于应用程序。

*奖励点:在加载文件之前我可以对文件进行预处理以减少 JVM 的内存使用量有什么建议吗? (这些文件与 Apache 服务器日志的格式相同。)

不要将任何不需要处理或显示的数据加载到内存中。生成平均值或总和所需的任何内容都可以临时加载并添加到运行总计中,然后可以丢弃。

【讨论】:

    【解决方案2】:

    你只会得到你想要的。如果压缩它,它将被压缩。 大多数情况下,内存中的大小和磁盘上的大小会略有不同。但这仅仅是因为磁盘(扇区)上的存储单元更大。即使对于 1 字节的文件,您大多数时候使用的文件也比磁盘上的要多,因为操作系统会为此保留一个扇区,并且取决于操作系统,您通常会找到 512、2048 或 4096 字节的扇区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2013-05-19
      • 2017-04-14
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      相关资源
      最近更新 更多