最简单的JVM内存结构图!既详细又简单明了,十分钟掌握

本文详细介绍了JVM的内存结构,包括方法区、堆、栈、程序计数器、本地方法栈和直接内存。通过案例分析了对象在内存中的分配,特别是逃逸分析在内存优化中的作用,帮助理解JVM如何提高程序运行效率。
摘要由CSDN通过智能技术生成

JVM内存结构图


image.png

大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前一样,案例先行,方便大家理解记忆。

/**
 * @author :jiaolian
 * @date :Created in 2021-03-10 21:28
 * @description:helloworld测试jvm内存区域
 * @modified By:
 * 公众号:叫练
 */
public class HelloWorldTest {

    public static void main(String[] args) {
        //新建HelloWorldTest对象;
        HelloWorldTest helloWorldTest = new HelloWorldTest();
        //新建2个线程调用sayHello
        for (int i=0; i<2; i++) {
            new Thread(()->helloWorldTest.sayHello("world")).start();
        }
    }

    /**
     * 对某人说hello
     * @param who
     */
    public void sayHello(String who) {
        System.out.println(Thread.currentThread().getName()+"hello!"+who);
    }
} 

如上代码:在主线程中for循环新建2个线程调用sayHello,最后两个线程分别对世界问好!这段代码比较好理解,就不贴输出结果了。我们编写并运行了这段代码,我们主要看看这段代码在JVM中是怎么运作的。

首先,我们编写一个HelloWorldTest.Java文件,经过javac编译会转化成字节码HelloWorldTest.class,为什么要转化成字节码呢?因为Java虚拟机能识别!最后由类加载子系统ClassLoader将字节码装载到内存。每块内存各有自己的作用,最后由执行引擎来执行字节码。下面我们重点介绍下各块内存发挥的作用!

image.png

方法区


方法区主要装一些静态信息,比如:类元数据,常量池,方法信息,类变量等。如上代码HelloWorldTest.class是类元数据,sayHello,main都是方法信息等都是放在方法区存储的。方法区中还需要注意两点:

  1. 如果方法区太大,超过设置,会报OutOfMemoryError:PermGen space错误。gclib工具可以动态生成类测试该错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值