更新时间:2020-10-29 17:35 来源:玩彩网 浏览495次
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教程中找到」答案。
提交申请后,顾问老师会电话与您沟通安排学习