美文网首页
JVM内存管理-运行时数据区

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

作者: Dalvik_ | 来源:发表于2021-08-12 15:35 被阅读0次

    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工具:查看内存

    内存虚拟化

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

    相关文章

      网友评论

          本文标题:JVM内存管理-运行时数据区

          本文链接:https://www.haomeiwen.com/subject/tlyfbltx.html