我想测试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/