• JVM 总结


    面试 java 虚拟机

    jvm 基础

    jvm

    • Write Once Run EveryWhere
      jar 包可以在任何兼容jvm上运行
      jvm 适配器 屏蔽掉底层差异
      内存管理

    jdk

    • 由.java - .class
    • jvm 监控工具

    jre

    • 由.class - 机器码

    jvm 运行时数据区

    avatar

    代码进入jvm后进行分解运行

    • 数据(线程共享区)
      方法区,java堆
    • 指令(线程独占区)
      虚拟机栈
      本地方法栈
      程序计数器

    is what ?

    程序计数器

    指向当前代码正在运行的字节码指令的地址 行号
    jvm 最小执行单位 线程
    用于 保存线程

    虚拟机栈

    • 存储当前线程运行方法所需要的 数据 指令 和 返回地址
    栈帧

    局部变量表
    操作数栈
    动态链接

    常量池
    动态解析
    XSS 虚拟机栈的最大深度 // 循环调用会爆

    出口
    ...
    将一个局部变量加载到操纵栈的指令包括:iload、iload_、lload…

    将一个数值从操作数栈存储到局部变量表的指令包括:istore、istore_、lstore…

    下面是我的java代码

    public static int add(int a,int b){
        int c=0;
        c=a+b;
        return c;
    }
    

    下面是编译后的字节码,也加上了我的理解,如果解释不恰当,谢谢指出

    0: iconst_0 //常量0压入操作数栈
    1: istore_2 //弹出操作数栈栈顶元素,保存到局部变量表第2个位置
    2: iload_0 //第0个变量压入操作数栈
    3: iload_1 //第1个变量压入操作数栈
    4: iadd //操作数栈中的前两个int相加,并将结果压入操作数栈顶
    5: istore_2 //弹出操作数栈栈顶元素,保存到局部变量表第2个位置
    6: iload_2 //加载局部变量表的第2个变量到操作数栈顶
    7: ireturn //返回

    方法区

    >*  类信息 常量 静态变量  JIT
    

    why ?

    jvm 内存模型

    Alt text

  • 相关阅读:
    使用Leangoo玩转故事地图
    用Leangoo做敏捷需求管理
    LEANGOO成员
    LEANGOO卡片
    给WebAPI的REST接口添加测试页面(三)
    使用Win2D在UWP程序中2D绘图(二)
    Visual Studio 2015的“转到定义”和“查看定义”出错的Bug
    使用Win2D在UWP程序中2D绘图(一)
    Windows 10 UWP程序标题栏设置
    .NET 4.6的RyuJIT尾递归优化的Bug
  • 原文地址:https://www.cnblogs.com/joeylee97/p/8557056.html
Copyright © 2020-2023  润新知