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 ...
随机推荐
- java was started but returned exit code =-805306369的处理方法
Myeclipse出现java was started but returned exit code =-805306369的错误,如图: 解决方法: 换个workspaces:换个工作目录,估计估计 ...
- 五、面向切面的spring(1)
spring的依赖注入看完了,接下来是spring中与DI一并重要的AOP了,开始吧,GO. 在软件开发中,散布于应用中多处的功能被称为横切发关注点,通常来讲,这些横切关注点从概念上市与应用的业务逻辑 ...
- Python关于函数作为返回值的理解(3分钟就看完了)
话不多说,直接看例子,上代码: def line_conf(): def line(x): return 2 * x + 1 return line #return a function object ...
- LeetCode(61) Rotate List
题目 Given a list, rotate the list to the right by k places, where k is non-negative. For example: Giv ...
- LeetCode 167. Two Sum II – Input array is sorted
Given an array of integers that is already sorted in ascending order, find two numbers such that the ...
- 第一个web项目
1) 创建Java Web Project 2) 创建相应的包 3) 创建类并继承于HttpServlet 4) 重写service()方法 5) ...
- python +selenium的 里面还自带case 然后也有生成报告的模板
https://github.com/huahuijay/python-selenium2这个就是 python +selenium的 里面还自带case 然后也有生成报告的模板
- 【数轴涂色+并查集路径压缩+加速】C. String Reconstruction
http://codeforces.com/contest/828/problem/C [题意] [思路] 因为题目保证一定有解,所有优化时间复杂度的关键就是不要重复染色,所以我们可以用并查集维护区间 ...
- Swoole 入门学习(二)
Swoole 入门学习 swoole 之 定时器 循环触发:swoole_timer_tick (和js的setintval类似) 参数1:int $after_time_ms 指定时间[毫秒] ...
- SOJ 4454 (矩阵快速幂)
先引入数的快速幂 例如计算2的5次方,常规算法2*2*2*2*2,利用快速幂的思想,求出5的二进制表达式101,权值为1和4的位上数字为1,即2^5=2^1*2^4.代码如下,时间复杂度为O(logn ...