跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

JVM中的方法区、永久代(PermGen space)和元空间(Metaspace)有什么区别?

文章导读

大家好,我是林译川。今天我们来聊聊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(
                            

相关文章