Ser*_*rov 31 java junit testng unit-testing out-of-memory
假设我有一个类进行一些繁重的处理,使用多个集合进行操作.我想要做的是确保这样的操作不会导致内存不足甚至更好我想设置一个可以使用多少内存的阈值.
class MyClass()
{
public void myMethod()
{
for(int i=0; i<10000000; i++)
{
// Allocate some memory, may be several collections
}
}
}
class MyClassTest
{
@Test
public void myMethod_makeSureMemoryFootprintIsNotBiggerThanMax()
{
new MyClass().myMethod();
// How do I measure amount of memory it may try to allocate?
}
}
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?或者这不可能/不可行?
And*_*hev 16
我可以想到几个选择:
您也可以编写自己的基准测试来计算内存.这个想法是
System.gc(), memoryBefore = runtime.totalMemory() - runtime.freeMemory()System.gc(), memoryAfter = runtime.totalMemory() - runtime.freeMemory()这是我在轻量级微基准测试工具中使用的一种技术,它能够以字节精度测量内存分配.
pas*_*701 14
您可以使用分析器(例如JProfiler)按类查看内存使用情况.或者,如何提到Areo,只是打印内存使用情况:
Runtime runtime = Runtime.getRuntime();
long usedMemoryBefore = runtime.totalMemory() - runtime.freeMemory();
System.out.println("Used Memory before" + usedMemoryBefore);
// working code here
long usedMemoryAfter = runtime.totalMemory() - runtime.freeMemory();
System.out.println("Memory increased:" + (usedMemoryAfter-usedMemoryBefore));
Run Code Online (Sandbox Code Playgroud)
要测量当前内存使用情况,请使用:
Runtime.getRuntime().freeMemory() ,
Runtime.getRuntime().totalMemory()
这是一个很好的例子: 获取操作系统级别的系统信息
但是这种测量并不精确,但它可以为您提供很多信息。另一个问题GC是不可预测的。
| 归档时间: |
|
| 查看次数: |
21960 次 |
| 最近记录: |