我正在尝试使用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);
}
}
}
作为预期,内存飙升并在附加的第一个快照中可见,即Memory_Shoots.JPG。然而,如果我从代码中删除以下注释并允许程序睡眠1秒钟,结果就会有所不同。
Thread.sleep(1000L);
内存增加后稳定下来并继续保持。请参考附加的第二个快照,即 Memory_Stabilizes.JPG。
我无法理解这种行为?您能否提供您的意见。