继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

qq_搁浅_112
关注TA
已关注
手记 1
粉丝 0
获赞 1

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()方法。

声明

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

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP