美文网首页
深入了解JVM

深入了解JVM

作者: _行走的五花肉_ | 来源:发表于2021-09-02 11:35 被阅读0次

    深入了解JVM

    JVM的实现需要遵守<Java虚拟机规范>,这是官方提供的规范
    Java SE Specifications
    所有的虚拟机实现都应该遵守

    运行时区域

    堆heap

    用于存储对象实例,数组实例,日后可能出现值类型的支持
    垃圾回收机制主要负责的区域, 又被称为GC堆(Garbage Collected Heap, 翻译成”垃圾堆”挺好)
    线程共享

    主流垃圾回收算法: 分代回收

    1. 新生代: 1个eden 2个survivor
    2. 老年代
    3. 永久代

    可动态扩展
    可产生OutOfMemoryError, 无法满足新的内存分配需求时

    方法区method area

    线程共享
    用于存储已被虚拟机加载 的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据
    又被称为: Non-Heap非堆

    • jdk7之前
      hotspot虚拟机, 方法区是用永久代的方式来实现的方法区
    • jdk7
      字符串常量池,静态变量,从永久代移出
    • jdk8
      完全废除永久代, 改用元空间, 类型信息移动到元空间中

    组成

    • 运行时常量池, 存放编译后即确定的常量(符号引用和直接引用都会存), 以及动态产生的常量(例如String.intern())
    • 字符串常量池和运行时常量池有什么区别 https://www.jianshu.com/p/0b264df1a2d3

    根据虚拟机实现, 是否可动态扩展, 是否可进行垃圾回收
    可产生OutOfMemoryError
    无法满足新的内存分配需求时

    直接内存

    直接使用物理内存, 并不是虚拟机的一部分
    NIO中的DirectByteBuffer中会保存本机内存的地址, 使用本机内存, 避免在Java对和native内存之间复制数据,可提高性能
    此区域受限于本机可用内存大小, 配置参数时, 需考虑堆的扩展, 避免大于物理内存限制, 出现OutOfMemoryError

    虚拟机栈vm stack

    • 栈帧的组成: 局部变量表 操作数栈 动态链接 方法出口信息

    本地方法栈native method stack

    程序计数器program counter register

    内存模型

    CPU缓存
    https://www.jb51.net/hardware/cpu/610074.html

    相关文章

      网友评论

          本文标题:深入了解JVM

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