6分钟死磕JVM的5大分区及具体作用

本文详细介绍了Java虚拟机(JVM)的内存划分,包括堆、方法区、虚拟机栈、本地方法栈和程序计数器。堆是最大的内存区域,用于对象实例的分配。方法区存储类型信息、常量和编译后的代码。运行时常量池存放字面量和符号引用。虚拟机栈和本地方法栈为线程私有,分别处理Java方法和本地方法。程序计数器记录当前线程执行的字节码指令地址。
摘要由CSDN通过智能技术生成

Java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,都有各自的用户级创建销毁时间。

堆区和方法区是随着虚拟机进程的启动一直存在的.

虚拟机栈、本地方法栈和程序计数器是依赖用户线程的启动和结束而创建和销毁的。

在这里插入图片描述

堆 [所有线程共享]

堆区是JVM管理的内存中最大的一块,“几乎”所有的对象实例都在这里分配内存。

堆区里面又区分有新生代、老年代。

新生代里又包含1个Eden区和2个survivor区【From survivor, To survivor】,

堆里的细分是为了更好的分配和回收内存。

方法区 [所有线程共享]

主要用于存储加载的类型信息、常量、静态变量和即时编译器编译后的代码缓存等数据。

在JDK8中已经把里面的永久代给废弃了,改用本地内存的元空间,这样就能加载更多的类型信息。

运行时常量池

用于存放编译期生成的各种字面量与符号引用。

虚拟机栈 [线程私有]

这个也就是我们经常说到的栈区。在每个方法执行的时候都会同步创建一个栈帧,每个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

每一个方法的执行就相当于是压栈和出栈,在每一个方法执行完毕后其对应栈内的数据也就随之被回收了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值