更新时间:2020-10-29 17:35:43 来源:极悦 浏览1200次
JVM是java虚拟机的简称,它实现了程序与操作系统的分离,从而实现了java的跨平台性,所以我们有必要学习JVM运行机制与原理等相关知识。JVM内存结构是大家需要学习的内容,下面我们来介绍JVM内存结构是由哪些部分构成的,一起来学习吧。
先来对JVM虚拟机进行简单的介绍:(1)java程序经过一次编译之后,将java代码编译为字节码也就是class文件,然后在不同的操作系统上依靠不同的java虚拟机进行解释,最后再转换为不同平台的机器码,最终得到执行;(2)Java虚拟机(JVM)处在核心的位置,是程序与底层操作系统、硬件无关的关键;(3)JVM的下方是移植接口,移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平台的部分称为适配器,JVM 通过移植接口在具体的平台和操作系统上实现;(4)JVM 的上方是Java的基本类库和扩展类库以及它们的API, 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台。
JVM内存结构可以用下图来表示:
下面是对JVM内存结构构成部分的介绍:
一、程序计数器。java线程私有的,类似于操作系统里的PC计数器,可以看做是当前线程所执行的字节码的行号指示器。如果线程正在执行的是一个java方法,这个计数器记录的正在执行的虚拟机字节码指令的地址。如果正在执行的是native方法,这个计数器值则为空。undefined此内存区域是唯一一个在java虚拟规范中没有规定任何OutOfMemoryError情况的区域
二、虚拟机栈(栈内存)。java线程私有,虚拟机栈描述的是java方法执行的内存模型。每个方法在执行的时候,都会创建一个栈帧用于存储局部变量、操作数、动态链接、方法出口等信息。每个方法调用都意味着一个栈帧在虚拟机栈中入栈到出栈的过程。
三、本地方法栈,和java虚拟机栈的作用类似,区别是该区域为JVM提供使用Native方法的服务。
四、堆内存。所有线程共享的一块区域,垃圾回收器管理的主要区域。目前主要垃圾回收算法都是分代收集算法,所以java堆中还可以细分为:新生代和老年代,再细致一点的还有eden区,from survivor、to survivor,默认情况下是8:1:1的比例。根据java虚拟机规范的规定,java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可,就像我们的磁盘一样。
五、方法区。各个线程共享的一个区域,用于存储虚拟机加载的类信息,常量、静态变量,即时编译器编译后的代码等数据。虽然虚拟机规范中把方法区描述成堆的一个逻辑部分,但是他却有一个别名叫Non-heap 非堆,目的是为了与java堆区分开来。运行时常量池。是方法区的一部分,用于存放编译器生成的各种字面量和符号引用。
JVM是java的虚拟机,在面试中,JVM面试题的出现几率都很大,所以也算是java编程中的重点学习内容,学好JVM内存结构有助于我们掌握JVM原理和相关操作,所以大家务必要学会JVM内存结构的内容,如果还有哪里不清楚的地方,可以在本站的java教程中找到答案。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习