文章导读
大家好,我是林译川。今天我们来聊聊JVM中的一些内存区域,特别是方法区、永久代和元空间。这些概念对于深入理解JVM的运行机制至关重要。读完这篇文章,你将能够清晰地了解这三者的区别,以及它们在JVM内存模型中的位置。
方法区
方法区是JVM中所有线程共享的区域,主要用于存储类的信息、常量池、方法数据和方法代码等。它逻辑上属于堆的一部分,但通常被称为“非堆”。方法区内存溢出的问题我们会在下文中详细探讨。
堆
堆内存也是JVM所有线程共享的部分,在虚拟机启动时就已经创建。所有的对象和数组都在堆上进行分配。这部分空间可以通过GC进行回收。当申请不到空间时会抛出OutOfMemoryError。
PermGen(永久代)
import java.util.ArrayList;
import java.util.List;
public class HeapOomMock {
List list = new ArrayList();
int i = 0;
public static void main(String[] args) {
boolean flag = true;
while (flag){
try {
i++;
list.add(new byte[1024 * 1024]);//每次增加一个1M大小的数组对象
}catch (Throwable e){
e.printStackTrace();
flag = false;
System.out.println(
