时间:2021-05-20
JVM 是一种抽象的计算机,基于堆栈架构,它有自己的指令集和内存管理,是 Java 跨平台的依据,JVM解释执行字节码,或将字节码编译成本地代码执行。Java 虚拟机体系结构如下:
Class File
Class File 是平台无关的二进制文件,包含着能被JVM执行的字节码,其中多字节采用大端序,字符使用一种改进的UTF-8编码。Class文件精确的描述了一个类或接口的信息,其中包括:
Class Loader
类加载器,JVM在类首次使用时动态的加载、链接和初始化。JVM默认的加载模型是双亲委派模型,类加载器之间存在父子关系的层次结构,内部使用组合实现。此外还有其他的加载方式,比如Servlet加载,它先尝试自己加载,不成功再委派上层加载器,类隔离;OSGI加载器之间是一种网状的依赖关系,没有上下层的区分,比较灵活。
加载
加载就是将Class文件表示的类或接口,在JVM方法区中创建一个与之对应的java.lang.Class对象,像Class.forName()、ClassLoader.loadClass()、反射都能触发类加载。当触发一个类加载时,详细的过程如下:
当ClassLoader在classpath中未找到类文件,会抛出ClassNotFoundException;当类A引用类B,类A已经成功加载,但是加载B时未找到类文件,会抛出NoClassDefFoundError。JVM有以下几种类加载器:
链接
初始化
执行类初始化方法,即赋值静态字段,执行静态块,顺序按照其定义的先后。父类的静态域会先于子类静态域初始化。
至此,一个类或接口被加载到了内存中,JVM会保证整个过程是线程安全的。需要注意的是整个过程没有涉及到任何实例对象。
运行时数据区
1.Method Area:线程共享,存储运行时常量池、类字段和方法信息、静态变量和方法的字节码,是堆的逻辑组成部分,这部分的垃圾回收是可选的。值得一提的是Hotspot JVM自JDK8之后,调整了这部分内存的内容,class meta-data的分配使用本地内存,interned String和类静态变量移动到了Java堆。
2.运行时常量池:对于JVM来说具有核心作用,基本上涉及到方法或字段,JVM就会在运行时常量池中搜索其具体的内存地址。
3.Heap:线程共享,存储实例对象,实例变量以及数组,是垃圾回收的主要区域。
4. JVM Stack:线程私有,用于存储栈帧,当方法被调用时会创建一个栈帧入栈,栈帧由以下几部分组成:
5. PC Register:线程私有,保存当前指令地址,执行后指向下一条指令地址。
6.Native Method Stack:线程私有,存储本地方法信息,C或C++栈。
执行引擎
读取、翻译、执行字节码。JVM基于栈架构,这个栈就是操作数栈,字节码指令就是通过它进行各种运算。此外还有基于寄存器的虚拟机。
本地方法接口和库
JNI,调用本地方法,c/c++库;执行引擎所需的本地方法库。
小结
主流JVM的实现有Oracle的Hotspot JVM、JRockit以及IBM的JVM。说到JVM调优,默认指的就是Hotspot VM,足见其流行程度。如今搞Java不去了解JVM就显得有点low了-v-。
要想写出高质量代码,不仅要了解JVM,像调优,问题排查等都需要完备的计算机基础知识,其实无论用什么语言开发,都是一个构建和完善自身计算机知识体系的过程。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
JVM体系结构和运行时数据区概述要理解JVM的运行时数据区,必须先要理解JVM的体系结构,因为虚拟机的体系结构基本上解释了“为什么会有这些运行时数据区”。JVM
本文将解释Arm计算机体系结构的组织方式,包括其ISA,执行状态,体系结构和处理器系列。arm计算机体系结构arm系列芯片封装了使用特定指令集的特定体系结构。最
网络体系结构是层和协议的集合。网络体系结构是指通信系统的整体设计,它为网络硬件、软件、协议、存取控制和拓扑提供标准。协议定义的分类: 1、网络体系结构(net
智能网体系结构包括一组部件以及部件之间的联系,体系结构学科得到了长足的发展,其内涵和外延得到了极大的丰富。特别是网络计算技术的发展,使得网络计算体系结构成为当今
世界上第一个网络体系结构是由IBM公司于1974年提出的SNA(SystemNetworkArchitecture),即IBM公司开发的系统网络体系结构。之后,