千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  IT问答库  >  Java基础知识

JVM模型的介绍一

发布:java培训 2022-03-16 09:54

JVM模型的介绍一

推荐答案

  Java培训班教程系列分享JVM模型的介绍Java内存分配:JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出时销毁。

  Java按照内存使用区域可以分为四个部分:堆、栈、方法区和程序计数器;其中栈又可以分为两大部分:Java虚拟机栈和本地方法栈;下面我将通过自己的学习与别人总结的参考见解来介绍下jvm

图片1

图片1

  程序计数器

  程序计数器是一块较小的内存空间,它被用来记录当前指令执行程序的位置,在内部通过改变计数器的位置来确定下一条指令执行程序的位置;

  我们知道Java多线程的实质是通过线程轮流切换并分配处理执行事件来实现的,而在任何一个确定的时刻,一个处理器只会执行一个线程中的一条指令。为了能让线程切换后仍然能恢复到原来的位置,每个线程都需要有一个独立的程序计数器,他们之间互不影响,所以,程序计数器是线程私有的内存区域

  如果一个线程正在执行一个Java方法,那么程序计数器记录的就是正在执行的虚拟机字节码指令的地址;如果正在执行一个native方法,那么程序计数器的值就为空;

  程序计数器是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域,在四个区域中只有它不会出现内存溢出的情况

  栈之Java虚拟机栈

  Java虚拟机栈描述的是Java方法的内存模型;每个方法在被执行的同时都会创建一个Java虚拟机栈(栈帧),用于存储局部变量表、操作栈、动态链接和方法出口等信息,因此Java虚拟机栈也是线程私有的;

  类似于动画是由一栈一栈的栈帧切换产生的,程序的执行也是由栈帧的切换产生的,只是这些栈帧中存放的是方法的局部变量、操作栈、动态链接和方法出口等信息;每一个方法被调用直至执行完成的过程,就是一个栈帧在虚拟机栈中从入栈到出栈的过程;

  对于执行引擎来说,只有栈顶的栈帧是有效的,称为当前栈帧,这个栈帧关联的方法称为当前方法,执行引擎所有的字节码指令都值针对当前栈帧进行操作;

  通常我们所说的变量存储在栈中是不严谨的,在Java虚拟机栈中存放的是对应方法的局部变量,而且这些局部变量存放在Java虚拟机中的局部变量表中;对于保存的局部变量分类:Java中的基本数据类型变量的值存放在局部变量表,而对于引用类型变量来说,局部变量表只会存放对象的引用,真正的值存放在堆中;

  Java虚拟机是使用局部变量表来完成参数值到参数变量表的传递过程的,系统不会为局部变量赋予初始值(对于实例变量和类变量都会赋予初始值)

  在Java虚拟机规范中,对Java虚拟机栈规定了两种异常情况:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError 异常;如果虚拟机栈动态扩展时无法申请到足够的内存时,会抛出OutOfMemoryError 异常

  以上就是小编介绍的"Java培训班分享的内容,希望对大家有帮助,如有疑问还可以点击进入Java视频教程进行学习。

  Java培训班http://Java.qfedu.com/

最新问答资讯

01 unity用什么编程语言?unity学习难度大吗

学习 unity 语言
6020 人关注

02 python容易学吗?学好python有什么好处?

学习 python 工作 培训
5389 人关注

03 html是什么语言?html学习难吗?

学习 html 语言 可以
5062 人关注

04 c语言难学吗?c语言学好要多久?

语言 技术 学习
4733 人关注

06 学好平面设计要多久?报速成班靠谱吗?

平面 设计 学习 时间
4238 人关注

相关问题

计算机前端和后端区别,到底该学哪一个?

互联网行业的发展速度很快,有关市场上对于it行业的人才需求量越...

java和php的区别是什么?哪一个更难一些?

有很多零基础的小白想要去学习编程技术,那么可以考虑一下java和...

java与java script的区别有哪些?

相信大多数同学对java、java script都不会陌生,二者都是编程语...

java中什么是继承?

继承的特点:只需明确一点,java只支持单继承,不支持多继承,但...

java byte取值范围是什么?

同学您好,java byte取值范围是什么?针对这个问题可以看看下面的...

javascript和java有什么区别

1)基于对象和面向对象:Java是一种真正的面向对象的语言,即使是...

测一测
你知道多少IT梗