JVM(HotSpot):堆空间(Heap)以及常用相关工具介绍

文章目录

内存结构图

二、堆的定义

1、通过new关键字创建的对象,都会放到堆空间中。

2、它是线程共享的,堆中的对象都要考虑线程安全问题。

那有同学肯定会问,方法内通过`new`创建的对象,它是存放在堆中吗?线程安全吗?
回答:依然存放在堆中,但是,线程安全的。因为,方法内的局部变量不涉及到多线程共享。

3、堆中的内存,依赖GC进行回收释放。

三、堆内存溢出

堆内存参数:-Xmx1m

错误信息

代码复现

java 复制代码
import java.util.ArrayList;

public class Demo03 {
	public static void main(String[] args) {
		int i = 0 ;
		ArrayList<String> list = new ArrayList<>();
		String a = "1111111";
		try {
			while (true){
				list.add(a);
				a += a;
				i++;
			}
		} catch (Throwable e) {
			e.printStackTrace();
			System.out.println(i);
		}
	}
}

四、堆内存排查工具

1、jps工具

查看当前服务器中有那些Java进程。

2、jmap工具

输出堆内存日志信息,查看堆内存占用情况

命令:jmap -heap pid

3、jconsole工具

图形化工具,更强大,可以执行GC回收、监测死锁。

4、jvisualvm工具

图形化工具,更强大,可以执行GC回收、监测死锁。还可以查看堆Dump

点击 堆 Dump 按钮

会生成一份dump文件,点击右侧查看按钮

这个查看功能,有点慢!!!!

以上工具的详细用法,自行百度。

推荐jmap。方便快捷。

相关推荐
大柏怎么被偷了几秒前
【C++算法】栈
开发语言·c++·算法
呵呵哒( ̄▽ ̄)"5 分钟前
vue.js 展示树状结构数据,动态生成 HTML 内容
开发语言·前端·javascript·vue.js
好看资源平台9 分钟前
Spring 全家桶使用教程 —— 后端开发从入门到精通
java·数据库·spring
Satan71212 分钟前
【Spring】Spring Aop基础入门
java·开发语言·jvm
A8644517 分钟前
解决在Nignx下Thinkphp路由不生效问题
开发语言·nginx·php·thinkphp
这河里吗l21 分钟前
Java每日面试题(JVM)(day15)
java·开发语言·jvm·笔记·后端
Rverdoser22 分钟前
macOS 系统中python的安装步骤
开发语言·python·macos
white__ice23 分钟前
2024.9.27
java
robot_大菜鸟38 分钟前
Powerbi -l9-异常数据的处理
android·java·powerbi
AutoAutoJack38 分钟前
C#的结构体(Struct)应用示例
开发语言·数据结构·人工智能·c#