java - java中的内存使用大数组难题

标签 java arrays memory

我想测试java中的类(foo)需要多少内存。在foo的构造函数中,我有以下新内容:

int 1 = new int[size]
int 2 = new int[size]
....
int 6 = new int[size]

大小从 100 开始,一直增加到 4000。
所以我的代码是:

Runtime r  = Runtime.getRuntime();
for(int i=0;i<10;i++)
r.gc();

double before = r.TotalMemory()-r.freeMemory();
Foo f = new Foo();
double after = r.TotalMemory()-r.freeMemory();
double result = after-before;

问题是在 2000 年之前我的结果越来越好。但是在 2000 年之后我有一个 < 2000 结果的数字。我猜触发了 gc。有时我得到的数字与它没有得到的数字相同'看不出有什么区别。
我确实使用 -Xms2024m -Xmx2024m 运行,这是我的完整电脑内存。但我得到了相同的行为。
我确实使用 -Xmn2023m -Xmx2024m 运行,并且得到了一些奇怪的结果,例如:3.1819152E7。

请帮我解决这个问题。提前致谢。

最佳答案

所有这些“我需要知道对象 A 占用了多少内存”的问题通常都是过早优化的症状。

如果您过早地进行优化(我认为是这样),请立即停止您正在做的事情,然后回到您真正应该做的事情:完成您当前正在处理的应用程序(我的另一个假设)。

如果您没有过早优化,您可能仍然需要立即停止并开始使用分析器,它会告诉您哪些对象实际上使用内存。只有然后您才能开始减少对象的内存需求或检查您忘记从某些集合中删除的对象。

关于java - java中的内存使用大数组难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1299144/

相关文章:

java - 如何从文本文件创建树形图

c - 如何在没有 printf 的情况下打印指针地址

ios - swift iOS : Memory leaks with the following code (video player)

php - 创建两个数组,一个以 0 为索引,另一个以 ID 为索引,并使用连接两者的引用

java - 从字符串数组分割成数组

r - 使用 mclapply、foreach 或 [r] 中的其他东西并行操作对象?

c# - 创建常量 IEnumerable<TSomeType>...的方法?

java - JSP - 验证复选框按钮导致加载时间长?

java - 无法写入核心转储。默认情况下,客户端版本的 Windows 不启用小型转储

java - java多线程Web服务中同步和维护操作顺序