jvm基本结构

image.png

1. jvm运行数据区

  • 1 PC寄存器
1.1 每个线程都有一个pc寄存器
1.2 在线程创建时创建
1.3 指向下一条指令
1.4 指向本地方法时 pc的值为undefined
  • 2 方法区
 2.1 保存装载类的形象
       2.1.1 类型的常量池
       2.1.2 字段、方法信息
       2.1.3 方法字节码
  • 3 java堆
 3.1 应用系统的所有对象保存在java堆中【但是不是所有对象都会分配到java堆中】
 3.2 所有线程共享java堆
 3.3 对于分代GC,堆也是分代的
 3.4 应用系统的所有对象保存在java堆中
  • 4 java栈
 4.1 线程私有
 4.2 栈由一系列帧组成
 4.3 帧保存一个方法的局部变量、操作数栈、常量池指针
 4.4 每次调用方法创建一个帧,并压栈
  • 5 栈调用过程演示


    image.png
  • 6 栈上分配对象
//添加jvm 参数-server -Xmx10m -Xms10M -XX:+DoEscapeAnalysis 开启对象逃逸
public class T {
    public static void main(String[] args) {
        Long l = System.currentTimeMillis();
        for (int i = 0; i < 1000000000; i++) {
            createObject();
        }
        System.out.println(System.currentTimeMillis() - l);
        //开启 -XX:+DoEscapeAnalysis 17毫秒
        //关闭 -XX:-DoEscapeAnalysis 10689毫秒
        //可以看出来对象逃逸对性能的优化是非常巨大的
    }
    /**
     * 如果开启-XX:+DoEscapeAnalysis 局部变量是分配到栈上
     * 该变量随着方法的结束而销毁这样就大大的减少了GC的压
     * 力,因为GC会回收堆上的对象
     */
    static void createObject() {
        byte[] b = new byte[2];
        b[0] = 1;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一直对JVM的基本结构很困惑,今天抽空整理下。 Java Virtual Machine的简称即Java虚拟机 虚...
    窝牛狂奔阅读 4,064评论 0 2
  • 1. jvm运行数据区 1 PC寄存器 1.1 每个线程都有一个pc寄存器 1.2 在线程创建时创建 1.3 指向...
    IT小鲍阅读 1,850评论 0 0
  • JVM基本结构 PC寄存器 线程私有 字节码指令的行号指示器,指向下调要执行的指令地址 不会发生OOM 堆 和程序...
    忘净空阅读 4,235评论 0 0
  • JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: ...
    光剑书架上的书阅读 7,584评论 2 26
  • 当看到"非凡足记"200期活动通知的时候,不知不觉的才发现已经过去了四年。"非凡足记"是良子集团旗下的一个户外品牌...
    大新子6阅读 4,700评论 3 6

友情链接更多精彩内容