JVM宏观认知&&内存结构
程序员文章站
2022-04-11 08:09:21
JVM宏观认知 1.什么是虚拟机? 虚拟机是一种 软件 。 可分为系统虚拟机(仿真物理机)和程序虚拟机(执行单个计算机程序,比如JVM)。 2.什么是Java虚拟机(JVM)? JVM是一种将字节码转化为机器码的软件。(同上) 历经时间的迭代,目前广泛应用的Java虚拟机是Oracle的HotSpo ......
jvm宏观认知
1.什么是虚拟机?
虚拟机是一种软件。
可分为系统虚拟机(仿真物理机)和程序虚拟机(执行单个计算机程序,比如jvm)。
2.什么是java虚拟机(jvm)?
jvm是一种将字节码转化为机器码的软件。(同上)
历经时间的迭代,目前广泛应用的java虚拟机是oracle的hotspot vm。
3.jvm有什么用?
- 理论:加深对java底层运行机制的了解和认知
- 实践:自定义性能更强的jvm(参数调优),排查由于java应用本身导致的线上问题(调优主要是调堆)
jdk的发布版本了解一下
- 1991.4 :java语言前身oak诞生
- 1995.5:oak语言改名为java
- 1996.1:jdk1.0发布,代表技术包括jvm,applet,awt
- applet是一种java程序,需要嵌入在html中解释执行
- awt是早期的抽象窗口工具包,目前流行的有swing,javafx
- 1997.2:jdk1.1发布,代表技术有jar文件格式,jdbc,内部类,反射
- 2002.2:jdk1.4发布,新的技术有正则表达式,nio,日志类
- 正则表达式是对字符串操作的一种逻辑格式
- nio在io的基础上增加了缓冲区,是一种非阻塞式的io模型
- 2004.9:jdk1.5发布,新的技术有自动装箱,泛型,注解,枚举,foreach循环
- 2006.11:sun公司宣布将java开源,并建立了openjdk组织对源码进行管理。
- 2009.4:oracle以74亿美元收购sun公司。
- 2014.3:oracle发布jdk1.8,新的特性有lambda表达式,stream api
- 2017.9:jdk9发布,新特性有模块化系统,可交互的repl工具,jit,jvmci等等
- 2018.3:jdk10发布,新特性包括jep286局部变量的类型推断,jep317向g1引入full gc
- 2018.9:jdk11发布,新特性包括基于嵌套的访问控制,javafx被移除【jdk1.8有】
- 2019.3:jdk12发布,新特性有低暂停时间的gc,微基准测试套件,switch表达式。
......
jvm内存结构
jvm内存结构也称为「运行时数据区」。
线程公有:
- java堆:存放java实例对象,生命周期和jvm一致
- 方法区:存储已被虚拟机加载的类信息、final修饰的常量、static修饰的静态变量。
- 运行时常量池:是方法区的一部分,存放字面量与符号引用。
- 字面量可以理解为实际值,int a = 8中的8 和 string a = "hello"中的hello都是字面量
- 符号引用是一个字符串,对应唯一的类,方法,或者字段。
线程私有:
- 程序计数器:每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行引擎读取下一条指令
- 虚拟机栈:描述java方法执行的过程内存是如何变化的。
- 每执行一个方法就会往栈中压入一个元素,这个元素叫“栈帧”用于存储局部变量表,栈的出入信息以及方法出口信息等。
- 生命周期和线程相同,线程结束自动释放内存,不需要垃圾回收。
- 本地方法栈:为虚拟机使用到的native方法服务。native底层是c语言编写的,用于和操作系统交互。
上一篇: GC回收算法&&GC回收器