JVM之堆学习
2023-12-15 04:54:13
一、Java虚拟机内存结构图
二、堆的介绍
1.?前面学习的程序计数器,虚拟机栈和本地方法栈都是线程私有的,堆是线程共享的;
2.?通过 new 关键字,创建的对象都会使用堆内存,其特点是:
-
它是线程共享的,堆中对象都需要考虑线程安全的问题(虚拟机栈中的局部变量只要不逃离方法的作用范围就是线程安全的 )
-
有垃圾回收机制
三、一些示例
3.1 堆内存溢出
1. 代码示例
package cn.itcast.jvm.t1.heap;
import java.util.ArrayList;
import java.util.List;
/**
* 演示堆内存溢出 java.lang.OutOfMemoryError: Java heap space
* -Xmx8m
*/
public class Demo1_5 {
public static void main(String[] args) {
int i = 0;
try {
List<String> list = new ArrayList<>();
String a = "hahaha";
while (true) {
list.add(a); // hahaha, hahahahahaha, hahahahahahahahaha...
a = a + a;
i++;
}
} catch (Throwable e) {
e.printStackTrace();
System.out.println(i);
}
}
}
2. 报错信息?
3. 修改堆内存大小
?修改了堆内存大小后再次运行程序:
?
3.2 堆内存诊断工具
jps:?首先通过jps工具查看当前系统中有哪些Java进程
jmp:?拿到Java进程后,可以通过jmap工具查看某个java进程的堆内存的使用情况,注意:jmpa只能查询某个时刻堆内存的占用情况,如果想对 堆内存做一个连续的检测,需要使用jmap或jvirsualvm工具:
jconsole:?
jvirsualvm:
文章来源:https://blog.csdn.net/qq_23388169/article/details/135006415
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!