JVM架构
1 JVM的内存模型
1.1 堆空间
每个jvm都有一个堆,所有的对象都放在这里。
1.2 java栈空间
每个线程都有一个java栈,所有的java栈都放在这里。
1.3 本地方法栈
每个线程都有一个本地方法栈。
1.4 pc寄存器
每个线程都有一个pc寄存器。
1.5 方法存储区
每个jvm只有一个方法存储区,方法名、类的全路径名等。
1.6 类的静态变量是存放在堆空间中的
类的静态变量是存放在该类的class对象中,而class对象是存放在堆中的。
1.7 字符串常量池
jvm单独维护了一个常量池,用来存放所有的字符串常量,它本质上是一个hash table,大小固定。
jdk6的时候,该字符串常量池是存放在方法区中的,jdk7的时候,该字符串常量池存放在堆中。
如果一个java程序字符串太多,会导致hash table中的冲突过多,导致访问变慢,影响性能。
2 JVM的类加载器
2.1 JVM类加载器的构成
JVM有三个类加载器:
引导类加载器,负载加载核心类,即在JAVA_HOME/jre/lib下的类。
扩展类加载器,负责加载扩展类,即在JAVA_HOME/jre/lib/ext下的类。
应用类加载器,负责加载应用程序自身的类。
2.2 JVM类加载器的工作过程
jvm的类加载器是分等级的,引导类加载器的等级最高,地位最高,扩展类加载器次之,应用类加载器最低。
加载一个类的时候,地位低的加载器先请求地位高的加载器先加载,只有地位高的不能加载时,才由地位低的类加载器加载。
这样就保证了核心类的地位。
2.3 JVM类加载器工作的结果
第一步,加载
加载.class文件,生成二进制数据,并且保存在方法存储区。
第二步,链接
链接的时候要做的有三件事情,核实类的正确性、为类的变量分配存储空间并且赋值为默认值、符号解析。所谓的符号解析就是通过搜索方法存储区,将symbol换成引用。这样就完成了多个.class文件之间的链接。
第三步,初始化
对方法区中的类的静态变量赋值。
3 JVM的执行引擎
3.1 每个线程都是JVM执行引擎的一个实例
这样的话,各个线程之间都是独立的,互不影响。最直观的对JVM执行引擎的理解:芯片中如果直接支持bytecode的话,执行引擎就是线程本身了。
3.2 引擎工作的过程
3.2.1 解释器
bytecode由opcode和oprand构成,它根据bytecode指令取oprand,然后根据opcode执行相应的操作,具体执行的时候肯定是翻译成本地的二进制指令来执行的。
3.2.2 just in time compiler
将经常调用的方法事先编译成本地的二进制指令,下次再碰到直接调用即可。
3.2.3 芯片级别支持bytecode
直接执行bytecode,bytecode指令就是本地指令。
4 类加载器和执行引擎的关系
类加载器已经生成了java应用程序的所有的bytecode,执行引擎就按照bytecode的顺序解释执行即可。
JVM架构的更多相关文章
- JVM 架构解读
每个Java开发人员都知道字节码由JRE(Java运行时环境)执行.但许多人不知道JRE是Java Virtual Machine(JVM)的实现,它分析字节码,解释代码并执行它.作为开发人员,我们应 ...
- 【转】JVM 架构解读
每个Java开发人员都知道字节码由JRE(Java运行时环境)执行.但许多人不知道JRE是Java Virtual Machine(JVM)的实现,它分析字节码,解释代码并执行它.作为开发人员,我们应 ...
- [转]一图读懂JVM架构解析
每个Java开发人员都知道字节码经由JRE(Java运行时环境)执行.但他们或许不知道JRE其实是由Java虚拟机(JVM)实现,JVM分析字节码,解释并执行它.作为开发人员,了解JVM的架构是非常重 ...
- JVM架构和GC垃圾回收机制
深入理解系列之JDK8下JVM虚拟机(1)——JVM内存组成 https://blog.csdn.net/u011552404/article/details/80306316 JVM架构和GC垃圾回 ...
- java面试题之----JVM架构和GC垃圾回收机制详解
JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...
- JVM架构和GC垃圾回收机制详解
JVM架构图分析 下图:参考网络+书籍,如有侵权请见谅 (想了解Hadoop内存溢出请看:Hadoop内存溢出(OOM)分类.参数调优化) JVM被分为三个主要的子系统 (1)类加载器子系统(2)运行 ...
- JVM系列之一:JVM架构
1.简介 Java平台可分为两部分,即Java虚拟机(Java virtual machine,JVM)和Java API类库. JVM是Java Virtual Machine(Java虚拟机)的缩 ...
- Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区
前言 之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么.虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事 ...
- [转载+整理]JVM性能调优----JVM架构
JVM的总体结构参考如下两图:
- JVM架构_XmnXmsXmxXss有什么区别:转
1.XmnXmsXmxXss有什么区别 首先,Xmn.Xms.Xmx.Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果. 了解jvm内存管理看这里:jvm ...
随机推荐
- Linux C下变量和常量的存储的本质
源代码 #cat main.c #include <stdio.h> int i = 100; int main(void) { func(); return 0; } #cat func ...
- 并发-5CAS与AQS
juc: java.util.concurrent 锁: 悲观锁:写的比较多,对数据的增删改,读(查)少.Lock 乐观锁:反之,读多写少.版本 并发编程之 CAS 的原理 什么是CAS CAS (c ...
- js使用canvas在前端压缩图片
HTML代码: <input id="file" type="file"> JS代码: var eleFile = document.querySe ...
- es6 day01
es6语法必须加‘use strict’ 'use strict' //预解释 变量提升 先看下边例子来感受下let的用法与特点 /* console.log(a);//undefined 只声明未定 ...
- python 3 廖雪峰博客笔记(二) python解释器
python 解释器用于理解 python代码,存在多种python解释器 CPython 官方版本python解释器,用C语言开发,使用最广泛 IPython 基于CPython,在交互方式上有所增 ...
- mysql批量插值
将查询结果集插入到表中(适用批量插值) 将结果集插入 不需要添加VALUES INSERT INTO `erp`.`role_menu` (`ROLEUUID`, `MENUUUID`) (SELEC ...
- oracle的备份方式
一.完全备份 exp 用户/密码@库名 file=存储位置 二.RMAN https://www.cnblogs.com/Latiny/p/6920428.html RMAN在数据库服务器的帮助下实现 ...
- mysql查询排名
student_work表 student_info表 sql语句:按grade从高到低排名 结果:
- Jquery validate自定义验证
http://www.runoob.com/jquery/jquery-plugin-validate.html addMethod(name,method,message)方法 参数 name 是添 ...
- Rim 边缘光
边缘光:计算眼睛和模型顶点法线的点积,结果作为强度,和材质输出:顶点和法线平行时,强度最大,垂直时,强度最小.因此将他取反,即同一方向时,强度最小,垂直时,强度最大. -dot(normalize(v ...