JVM 基础篇

什么是JVM

Write Once Run Everywhere

  1. 软件层面机器码翻译( .class ====> 1 2 1 2 )
  2. 内存管理

为什么学习JVM

出现内存溢出,内存泄漏我们是一无所知的,so

运行时数据区

代码分类:数据 指令 控制

程序计数器:

指向当前线程正在执行的字节码指令的地址 行号。why 线程被挂起再次运行时,通过程序计数器指向的地址 continue。

虚拟机栈:

存储当前线程运行方法所需要的数据 指令 返回地址。why 最小执行单元线程是做事情的,怎么做由人控制
虚拟机栈存储单元:栈帧(方法)

栈帧:
局部变量表:

编译期就知道大小的区块,定长的。32位

操作数栈:

字节码文件反编译:javap -c -v xxx.class > p.txt

动态链接:

接口注入,运行时指向真正的实例。常量池(元数据信息,final常量,String)

出口:

返回地址,出栈。

本地方法栈:

方法区:

类信息
常量
静态变量
JIT

heap:

内存模型:

对象的生命周期不一样 ==>分代

Meta Space

为了解决永久代溢出的问题,类似ArrayList可扩容。

新生代

老年代

你可能感兴趣的:(JVM 基础篇)