减少 Java 中的内存消耗

Ans*_*shu 7 java memory performance

我曾参与过一些项目,其中实现更好的性能和减少内存消耗是主要目标。但是相信我,在 Java 中控制内存消耗已经很困难了。

这个wiki 页面上说“ Java 程序速度,在某些情况下,Java 在低级和数字基准测试中等同于 C++。

这些统计数据并没有真正显示时间计算性能基准的主要差异。但是,Java 中的内存使用量比 C++ 高得多,因为每个对象有 8 字节的开销,Java 中每个数组有 12 字节的开销(32 位;64 位 java 中的两倍),如中所述以上维基链接。

现在的问题是人们采取了哪些措施来最小化 Java 中的内存使用率?

请注意,我更关心内存而不是性能,因为我想不出比“编写更好的程序”和“在 JDK 中正确调整内存”更好的方法

小智 6

根据您的工作内容,您可以从不同的编程实践中受益,例如:

  • 在实际使用变量之前限制初始化变量的数量。
    • 只是一个通用的良好编码技巧。已初始化但暂时不需要的变量会占用尚未需要的内存,这可能会浪费资源。
  • 在适用的情况下通过静态对象进行对象缓存。
    • 我之前在反射密集型应用程序中使用过它,我需要在循环内获取对象的成员列表,它可以根据可能需要的情况极大地提高性能。
  • 适用的对象池
  • 如果您正在编写多线程应用程序,则可以利用线程池通过限制创建和启动新线程的工作量来获得性能。

  • 对象池(以及更大程度的线程池)实际上倾向于“增加”内存使用量,以提高性能。重点是,你“保留目前不使用的对象”,假设你很快就会再次需要它们。 (3认同)

gig*_*dot 2

除了减少创建的对象数量并尝试使对象短暂存在之外,您对内存无能为力。但是,Java 仍将使用允许的所有内存以获得最佳性能。