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

JVM模型的介绍一

来源:千锋教育

发布:java培训

2022-03-16

Java基础知识 分类问答库

推荐答案

  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/

更多问题在线答疑

导师线上坐镇
解答个性化学习难题

立即提问

上一篇

JVM模型的介绍二

下一篇

什么是JVM?

相关问题

更多 >>
javascript和java有什么区别 学习java的步骤是什么 java怎么学才能学好 Java培训班的课程一般都学习什么内容 学习Java有哪些技巧吗 java程序员常用到的技术有哪些
热门问题
Java基础知识 Java培训机构 Java培训费用 Java培训时间 java培训课程 Java培训就业 零基础学Java java薪资待遇 java学习路线

全国咨询热线400-811-9990