17 堆定义
通过new关键字创建,创建对象都会使用堆内存。
是线程共享的,需要考虑线程安全问题。
有垃圾回收机制。
18 堆-内存溢出
当默认情况下,发现执行到26,出现内存溢出。
当我们将堆内存调为8m,继续执行,如图2.发现支循环了17次。
-Xmx=8m;
下面的demo展示一下为何内存溢出;
因为list的生命周期是在try块里,每次新建对象,而且不被回收。
代码如下。
public class Demo1_5 {
public static void main(String[] args) {
int i=0;
try{
List<String> list=new ArrayList<>();
String a="hello";
while (true){
list.add(a);
a=a+a;
i++;
}
}catch (Throwable e){
e.printStackTrace();
System.out.println(i);
}
}
}
19 堆-内存诊断jmap
jps 查看有哪些java进程
jmap 查看堆内存占用情况
jmap -heap 进程id 查看堆内存占用情况。
也可以发现,新创建的对象会放在eden区。
Heap Usage
测试代码
public class Demo1_4 {
public static void main(String[] args) throws Exception{
System.out.println("1.....");
Thread.sleep(30000);
byte[] array=new byte[1024*10*1024];
System.out.println("2....");
Thread.sleep(20000);
array=null;
System.gc();
System.out.println("3....");
Thread.sleep(100000L);
}
}
创建数组对象前(hh,我手速太慢了)。。。
文章来源:https://www.toymoban.com/news/detail-626410.html
20 jconsole
文章来源地址https://www.toymoban.com/news/detail-626410.html
到了这里,关于堆内存和一些检测工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!