JVM内存管理-运行时数据区

2021-08-12  本文已影响0人  Dalvik_

1.JVM是一种规范和运行时数据区
java程序运行过程


java程序运行过程.png

源码-> Java->.class->JVM ->ClassLoader
解释执行:
JVM C++写的 C++解释器
经过JVM的翻译,速度相对慢一点

JIT执行(hotspot):
java代码 翻译成 汇编 (机器码) 放到codcase
速度比加快
JDK JRE JVM
JRE 包含JVM和一些java类库

JVM的跨平台 (不同平台对应不同的JVM)
JVM的语言无关性(跟语言无关性,只要语言可以翻译成class文件)


常见的JVM实现.png

常见的JVM实现
1.hotspot Jrockit. Oracle
2 J9 IBM
3 LiquidVM BEA
4 Zing(C4算法 垃圾回收算法)
5 TaobaoVM
6 毕昇 华为

运行时数据区


运行时数据区.png

线程共享区:方法区(运行时常量池) 堆
线程私有区:虚拟机栈 本地方法栈 程序计数器
直接内存(对外内存)

2.栈帧的执行对内存区域的影响


栈帧的执行对内存区域的影响.png

java方法的运行与虚拟机栈
虚拟机栈:存储当前线程运行java方法所需的数据、指令、返回地址
栈帧
大小限制:-Xss
栈溢出:
超出虚拟机大小限制(方法死递归)
栈帧:
一个方法对应一个栈帧

局部变量表:记录方法中所有的局部变量
操作数栈:记录当前的操作数
完成出口:记录方法的完成行号
程序计数器:指向当前线程正在执行的字节码指令(字节码行号)

字节码的行号针对本方法的偏移

本地方法栈
方法区
直接内存 unsafe 绕过了JVM的垃圾回收

深入理解JVM内存区域


深入理解JVM内存区域.png

JVM内存处理流程:
JVM申请内存
初始化运行时数据区
类加载
执行方法
创建对象

JHSDB工具:查看内存

内存虚拟化

堆溢出
栈溢出
方法区溢出
直接内存溢出

上一篇下一篇

猜你喜欢

热点阅读