0%

java | 垃圾回收后,内存占用依然很高「堆」

有的时候 GC 根本没有用处,导致内存占有率非常高,所以,这里借助 visualvm

打开 visualvm

发现堆内存非常高,然后点击红框的 「堆 Dump」。

然后点击「查找」,看看堆中是哪些对象占用的。发现时第一个对象,对这个对象双击。

然后发现,是这个对象存储了 Student 对象。然后看看这段代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.redisc;

import lombok.extern.slf4j.Slf4j;

import java.util.*;


@Slf4j(topic = "c.Run")
public class Run {

public static void main(String[] args) throws Exception {
List<Student> students = new ArrayList<>();
for (int i = 0; i < 200; i++) {
students.add(new Student());
}
Thread.sleep(10000000000L);
}

}

class Student {
private byte[] big = new byte[1024 * 1024];
}

由于 students 一直存储着 student 对象,导致,并且一直被使用,导致,GC 没办法回收,内存占有率,居高不下。

请我喝杯咖啡吧~