内容简介:提起JAVA,都知道它有个虚拟机,因此可以跨平台,一次编写,到处运行。但具体原理是咋样的?身为JAVA小白,岂可不知!一、原理JVM实现了JAVA语言最重要的特征:平台无关性。其原理:java程序并不直接在操作系统上执行,而是由JVM执行。JVM屏蔽了与具体平台相关的信息,使得JAVA程序只需编译成适应JVM,可以在JVM上运行的目标代码(.class)就行,JVM再负责解释成具体平台的机器指令执行。同时,JVM还会进行安全检查,是java程序的安全检验引擎。
提起JAVA,都知道它有个虚拟机,因此可以跨平台,一次编写,到处运行。但具体原理是咋样的?身为 JAVA 小白,岂可不知!
一、原理
JVM实现了JAVA语言最重要的特征:平台无关性。其原理:java程序并不直接在操作系统上执行,而是由JVM执行。JVM屏蔽了与具体平台相关的信息,使得JAVA程序只需编译成适应JVM,可以在JVM上运行的目标代码(.class)就行,JVM再负责解释成具体平台的机器指令执行。同时,JVM还会进行安全检查,是java程序的安全检验引擎。
二、结构
JVM由三大部分组成:
1、类加载器 2、执行引擎 3、运行时数据区域
1、类加载器
具体作用就是将 .class
文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的 .class
文件,而是根据需要去动态加载。
类的加载过程采用双亲委派模型:
1)当前类加载器首先检查自己的加载清单,如果存在该类,则返回之; 2)如果没找到,委托父类加载器去加载;父类加载器重复动作1,递归至祖宗bootstrap ClassLoder(我靠,bootstrap,还以为是前端框架呢。bootstrap,引导之意); 3)都没有,仍然由当前类加载器加载,并纳入自己缓存中。
采用双亲委派模型,目的在于更好的保证Java平台的安全。所谓的安全,是指java的核心类被用户自己编写的类所替换。由于核心类在虚拟机初始化时就已加载,而每次加载类前先检查是否存在,所以可以避免核心类被替换。
各种类加载器:
Bootstrap class loader: 父类
当运行 java 虚拟机时,这个类加载器被创建,它负责加载虚拟机的核心类库,如 java.lang.* 等。例如 java.lang.Object 就是由根类加载器加载的。需要注意的是,这个类加载器不是用 java 语言写的,而是用 C/C++ 写的。
Extension class loader:
这个加载器加载出了基本 API 之外的一些拓展类。
AppClass Loader(SystemAppClass):
加载应用程序和 程序员 自定义的类。
2、执行引擎
作用: 执行java编译好的字节码,或者执行本地方法
3、运行时数据区域
JVM 运行时数据区域 (JVM Runtime Area) 其实就是指 JVM 在运行期间,其对JVM内存空间的划分和分配。JVM在运行时将数据划分为6个区域来存储:
Program Counter (PC) Register:程序计数器 Java Virtual Machine Stacks:Java虚拟机栈 Heap Memory:堆内存 Method Area:方法区 Run-time Constant Pool:运行时常量池 Native Method Stacks:本地方法栈
我们写的所有程序都被加载到这里,按不同类别存放在
堆内存 Java虚拟机栈 本地方法栈 程序计数器 方法区
1)从 线程的角度 理解Java Runtime Area
a.线程私有:
程序计数器 Java虚拟机栈 本地方法栈,生命周期与线程一致;
b.线程共享:
Java堆,方法区,运行时常量池,生命周期与JVM一致。
2)从 存储内容 理解Java Runtime Area
方法区和常量池存储类的信息
堆内存存储对象信息
程序计数器,Java虚拟机栈,本地方法栈存储线程的信息
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Vue源码解析:虚拟dom比较原理
- VMware虚拟机三种联网方法及原理
- Vue原理之虚拟DOM和render函数
- 谈谈对物理内存和虚拟内存的理解以及内存分配原理,一文彻底搞懂
- JavaScript 是如何工作的:编写自己的 Web 开发框架 + React 及其虚拟 DOM 原理
- 10 张图 22 段代码,万字长文带你搞懂虚拟内存模型和 malloc 内部原理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C语言算法速查手册
程晓旭、耿鲁静、张海、王勇 / 2009-10 / 49.00元
《C语言算法速查手册》用C语言编写了科研和工程中最常用的166个算法,这些算法包括复数运算、多项式的计算、矩阵运算、线性代数方程组的求解、非线性方程与方程组的求解、代数插值法、数值积分法、常微分方程(组)初值问题的求解、拟合与逼近、特殊函数、极值问题、随机数产生与统计描述、查找、排序、数学变换与滤波等。同时结合这些算法列举了将近100个应用实例,对其进行验证和分析。 《C语言算法速查手册》适......一起来看看 《C语言算法速查手册》 这本书的介绍吧!