一. 引言,环境安装测试中的代码解析

1. HotSpot(TM) 64-bit Server VM(build 25.181-b13,mixed mode),这是多种
HotSopt是多种虚拟机中的一种,是一个
热点探测技术
Hotspot虚拟机特点: 虚拟机会加载class文件,每次加载文件都会对该class文件进行标记,当标记到达一定的阀值会触发
JIT机制
JIT机制解释:即使编译,对频繁使用的CLass文件进行缓存,直接编译成虚拟机可以使用的文件,并进行缓存
2.Class文件是一个中间层文件, 虚拟机不能直接执行这个文件,虚拟机会将该文件编译成本地代码,
HopSpot的两种运行机制:Server和Client, 采用两套机制来初始化自己
Client:更多的是基于桌面应用进行的虚拟机优化,B/S结构,客户端是可以并发的,为虚拟机分配的空间相对Servler来说要小很多,主要是为了在客户端环境中减少启动时间而优化;
Server:分配给虚拟机的的空间比CLient大,优化方式也不同,处理大流量请求的时候效率比较高,在服务器环境中最大程度的提高执行效率
缺点: 会造成空间浪费,它申请给虚拟机的内存空间比较大
二. Java虚拟机的基本结构

1. 类加载子系统,参考笔记
类加载器
- 类加载器:
- 读取Class文件,并将其转换成虚拟机可以使用的对象,将类的信息存到方法区中
- 方法区:
- 存储加载器传递的类的信息
- 存放常量池信息,包括字符串和数字常量
- java堆
- 堆的区域是线程共享的
- 堆得内存大小由jvm决定
- 存储创建的对象信息
- java栈
- 每一个线程都有一个栈
- 线程创建的时候创建
- 保存帧空间
-
举例,递归中,方法每次调用自己的时候,要进行压栈操作么,当一个新的方法压栈的时候原来的方法中还有其他地方没有运行完,还有一些数据需要保存, 这个保存点就叫做栈帧
-
保存局部变量,对象地址,方法,方法参数,还有方法的调用信息
- 直接内存
- 是物理内存的映射,大小不由虚拟机分配,理论上大小无限,实际按照物理内存的大小
- 允许java的NIO模块直接调用
- 垃圾回收系统
- 作用在java堆,java栈,方法区中
- 自动化,不需要手动,会自动检测,标识,寻找无用的对象并进行回收,全程静默
- 本地方法栈
- 存放本地方法
- 本地方法指的是当前操作系统的api,虚拟机是需要本地系统的api才能够运行的
- pc寄存器
- 主要用来分辨某一个线程正在操作的方法类型,并且被虚拟机选择调用虚拟机自己的方法
- 如果当前线程正在执行的是本地操作系统的方法,会返回undefine
- 如果在操作虚拟机方法,则返回该方法
ps:
虚拟机中不可能只存在一条线程,虚拟机中的线程任意状态一定是在执行方法;
- 执行引擎
-
执行引擎负责执行虚拟机的字节码,都采用 JIT (Just In Time) 即时编译,编译成机器码后再执行
三.总结
jvm为每个新创建的线程都分配一个堆栈;
附件列表
https://www.cnblogs.com/lyuweigh/p/36e52fac9a5656dca084eedb06b09129.html