|
|
1
20
我建议您使用内存分析器,查看内存消耗的位置,并对其进行优化。如果没有定量的信息,你最终可能会改变一些事情,这些事情要么没有效果,要么实际上会让事情变得更糟。 您可以考虑更改数据的表示形式,尤其是在对象很小的情况下。 例如,可以将数据表表示为一系列列,每列具有对象数组,而不是每行一个对象。如果不需要表示单个行,那么这可以为每个对象节省大量开销。e、 g.具有12列和10000000行的表可以使用12个对象(每列一个),而不是1000万个对象(每行一个) |
|
|
2
18
|
|
|
3
11
确保对象模型正常化,不要重复值。 嗯,而且,如果只有数百万个对象,我想我会选择一个像样的64位虚拟机和大量ram;) |
|
|
4
4
普通的“探查器”对您帮助不大,因为您需要对所有“活动”对象进行概述。您需要堆转储分析器。我推荐 Eclipse Memory analyzer . 检查您是否可以应用flightweight、copyonwrite、惰性初始化等模式(google将是您的朋友)。 |
|
|
5
3
请看从这里链接的演示文稿。它列出了常见java对象和原语的内存使用,并帮助您了解所有额外内存的去向。 Building Memory-efficient Java Applications: Practices and Challenges |
|
6
2
您可以只在内存中存储较少的对象。:)使用溢出到磁盘的缓存,或者使用Terracotta对堆进行集群(这是虚拟的),从而允许将未使用的部分从内存中清除,并透明地返回到内存中。 |
|
|
7
1
java memory profiler )80%的时候,我们忽略的例行程序中存在一些问题。此外,集合类更容易发生内存泄漏。 |
|
|
8
1
如果您有数百万个整数和浮点数等,那么请查看您的算法是否允许在基元数组中表示数据。这意味着每次垃圾收集的引用更少,CPU成本更低。 |
|
|
9
0
一个奇特的方法是:将大部分数据压缩到ram中。仅展开当前工作集。如果您的数据具有良好的局部性,则可以很好地工作。 使用更好的数据结构。java中的标准集合相当占用内存。 [什么是更好的数据结构]
|
|
|
10
0
花一些时间熟悉和调整 VM command line options |
|
|
11
0
|
|
|
12
0
1) 尽可能使用正确的数据类型
在这里,我们可以在发送Person对象时使用以下变量来节省内存
2) 而不是返回新的ArrayList<&燃气轮机;(); 从方法中,可以使用Collection.emptyList(),它将只包含一个元素,而不是默认的10个元素; 例如
3)尽可能在方法中移动对象的创建,而不是静态声明,因为对象的字段将存储在堆栈而不是堆上 4) 使用protobuf、thrift、avro、messagepack等二进制格式来减少相互通信,而不是json或XML |