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 ...
随机推荐
- XP禁用了U盘和移动硬盘方法
会不会是你XP禁用了U盘和移动硬盘下面这些是任何禁用U盘的!你自己反着试下嘛!方法一,BIOS设置法(快刀斩乱麻法) 进入BIOS设置,选择“Integrated Peripherals”选项,展开后 ...
- win10下硬盘安装CentOS7
安装环境: 1.系统:Windows 10 2.硬盘:SSD(已装好Win 10) + HHD(用来装CentOS 7) 准备工作: 1.DiskGenius(分区工具):用来给硬盘做分区: 2.系统 ...
- 【Html,Css,JavaScript】初学总结
网页制作 HTML 一.通用模板: <!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8 ...
- (蓝桥杯)2018JAVA B组 日志分析
日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞". ...
- UVA 10652 凸包问题
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> # ...
- Eclipse配置SVN的几种方法及使用详情
此文章对Myeclipse同样适用. 一.在Eclipse里下载Subclipse插件 方法一:从Eclipse Marketplace里面下载 具体操作:打开Eclipse --> Help ...
- 共享一个NOI用过的vimrc [rc][vimrc]
set nocp set nu set ru set noet set ai set cin set mouse =a set mp=g++\ %\ -o\ %<\ -g\ -Wall\ -Ws ...
- HDU 5642 King's Order【数位dp】
题目链接: http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=677&pid=1003 题意: 求长度为n的序列 ...
- [bzoj4300]绝世好题_二进制拆分
绝世好题 bzoj-4300 题目大意:题目链接. 注释:略. 想法: 二进制拆分然后用一个数组单独存一下当前答案即可. Code: #include <iostream> #includ ...
- SqlServer函数获取指定日期后的第某个工作日
获取工作日 需要编写一个SqlServer函数,F_getWorkday,传入两个参数,第一个为时间date,第二个参数为第几个工作日num.调用F_getWorkday后返回date之后的第num个 ...