为了账号安全,请及时绑定邮箱和手机立即绑定

简单理解java虚拟机内存区域

标签:
JVM

1. 简介

jvm在执行java程序的时候会将它所管理的内存划分为若干个不同的输区域,每个区域都有各自的用途。从线程的角度来分下类,jvm内存区域可以分为两类:线程私有和线程共享。
线程私有:虚拟机栈、本地方法栈和程序计数器。
线程共享:堆和方法区。

2. 具体介绍

2.1 程序计数器

程序计数器是当前线程所执行的字节码的行号提示器。简单理解就是根据这个字节码来确定下一步要干什么,比如调用哪个方法、处理哪个异常、执行哪段代码等等。
由于java多线程是轮流切换线程并分配处理器时间来实现的,在任何一个确定的时间里,处理器只能执行一个线程,因此每一个线程都已一个独立的程序计数器。

2.2 虚拟机栈

虚拟机栈是存储虚拟机方法调用时的信息,在调用虚拟机方法时,会生成一个栈帧,把调用方法的局部变量表(基本数据类型、对象引用和returnAdress类型)、操作数帧、动态链接和方法出口等信息放入栈帧,栈帧入栈到虚拟机栈,等方法执行完成时,该栈帧从虚拟机栈出栈。

2.3 本地方法栈

与虚拟机栈功能相同,只不过服务对象是本地方法。

2.4 java堆

java堆是jvm内存区域中最大的一部分,在虚拟机启动的时候创建,用于存放对象的实例。
不得不提java堆是垃圾收集器管理的主要区域。主要分为Eden、From Survivor和To Survivor空间等。而且java堆可以处于物理上不连续的内存空间中,只要逻辑上连续即可。

2.5 方法区

方法区用于存储已经被虚拟机加载的类的基本信息、常量、静态变量以及即时编译器编译后的代码等数据。可以分为永久代和运行时常量池。
运行时常量池一是用于存放编译期生成的各种字面量和符号引用,二是用于存放运行期新的常量,被利用的比较多的String类中的intern()方法。

声明

以上文字为个人理解,如有错误欢迎各位大佬批评指正,谢谢!

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消