1.堆_Heap_介绍
通过 new 关键字,创建对象都会使用堆内存
2.特点
1.它是线程共享的,堆中对象都需要考虑线程安全的问题
2.有垃圾回收机制【堆中没有被引用的对象,会被垃圾回收】
3.堆内存溢出
异常:java.lang.OutOfMemoryError: Java heap space
代码:
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);
}
}
参数:
-Xmx8m 8m堆内存
4.堆内存诊断
public static void main(String[] args) throws InterruptedException {
System.out.println("1...");
Thread.sleep(30000);
byte[] array = new byte[1024 * 1024 * 10];
System.out.println("2...");
Thread.sleep(20000);
array = null;
System.gc();
System.out.println("3...");
Thread.sleep(1000000L);
}
1. jps 工具
查看当前系统中有哪些 java 进程
10656 RemoteMavenServer36
22112 Jps
26020
15896 Launcher
21160 Demo1_4
============================================
2. jmap 工具
查看堆内存占用情况【内存快照】:jmap - heap 进程id
eg:jmap -heap 21160
Attaching to process ID 21160, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.172-b11
using thread-local object allocation.
Parallel GC with 13 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 4271898624 (4074.0MB)
NewSize = 89128960 (85.0MB)
MaxNewSize = 1423966208 (1358.0MB)
OldSize = 179306496 (171.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 67108864 (64.0MB)
used = 19886304 (18.965057373046875MB)
free = 47222560 (45.034942626953125MB)
29.632902145385742% used
From Space:
capacity = 11010048 (10.5MB)
used = 0 (0.0MB)
free = 11010048 (10.5MB)
0.0% used
To Space:
capacity = 11010048 (10.5MB)
used = 0 (0.0MB)
free = 11010048 (10.5MB)
0.0% used
PS Old Generation
capacity = 179306496 (171.0MB)
used = 0 (0.0MB)
free = 179306496 (171.0MB)
0.0% used
3168 interned Strings occupying 259800 bytes.
============================================
3. jconsole 工具
图形界面的,多功能的监测工具,可以连续监测
5.现象_垃圾回收后,内存占用仍然很高
jvisualvm 工具
:点击 堆 dump 【堆转储】 查询,查找前20个最大的对象
public class Demo1_13 {
public static void main(String[] args) throws InterruptedException {
List<Student> students = new ArrayList<>();
for (int i = 0; i < 200; i++) {
students.add(new Student());
}
Thread.sleep(1000000000L);
}
}
class Student {
private byte[] big = new byte[1024*1024];
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)