我正在尝试使用 visualvm 进行一些内存分析。我已经编写了一个基本代码,它运行一个无限循环来将对象添加到列表中。
package home.always.learning.java;
import java.util.ArrayList;
import java.util.List;
public class Heaper {
private static List<PersonDetails> listObj = new ArrayList<PersonDetails>();
private static final String nameConst = "Tarun Trehan";
public static void main(String[] args)throws Exception{
personListCreation();
}
public static void personListCreation() throws Exception
{
int i = 0;
while(true)
{
System.out.println("Looping to create person list...");
i++;
listObj.add(new PersonDetails(nameConst+i));
//Thread.sleep(1000L);
}
}
}
正如预期的那样,内存迅速增加并在附加的visualvm 1st 快照中可见,即Memory_Shoots.JPG。
但是,如果我从代码中删除以下注释并让程序休眠 1 秒;结果不同:
Thread.sleep(1000L);
内存增加但随后稳定并继续。请参考附上的第二张快照,即Memory_Stabilizes.JPG
我无法理解这种行为?您能否提供您的意见。