image.png

    javac
    java

    JVM是如何运行这个Java程序的:
    1. JVM启动并完成初始化。Hotspot初始化做的事情很多很多
    2. 完成类加载器的创建,然后去找main方法所在的类
    3. 触发加载阶段将硬盘上的字节码文件载入内存,进行解析,生成klass对象
    字节码解析器的工作
    class文件
    klass模型

    元空间
    4. 根据方法名及方法描述符,在这个klass对象中找到main方法
    5. 构建方法运行环境
    6. 调用方法
    字节码指令
    7. 调用完清理环境

    内存模型
    用的JVM自己的
    执行引擎
    虚拟机栈
    栈帧
    字节码指令

    完全模仿Hotspot的
    —————————-
    垃圾收集器
    gc
    jit

    sync

    1M

    执行流

    gc root

    oop

    jvm + JNI
    ————————
    Hotspot

    云原生

    java
    c++
    汇编
    硬编码、机器码

    jvm解释器
    字节码解释器
    模板解释器 执行流
    机器码
    汇编

    栈帧

    1、写这种文字
    2、花堆栈图 下节课

    0 getstatic #2
    1、取静态属性
    2、压入栈
    3 ldc #3 字符串常量池 边缘功能
    1、从常量池(运行时常量池)取出字符串对象
    2、字符串对象压入栈
    5 invokevirtual #4 非静态方法,默认参数,this指针 main

    1. aa(int a, int b, int c)<br /> <br /> 解析它的签名得到的<br /> <br /> println(String)<br /> <br /> obj, println, String.class<br /> <br /> sout(add())
    2. 1、构建运行环境:创建栈帧……、参数出栈、给this指针赋值<br /> 2、执行方法<br /> jdk自带的(反射实现的) 奇特的问题<br /> 自定义的(6节课、方法重复调用、嵌套调用……)

    静态方法中为什么不能调用非静态方法
    非静态方法中是可以调用静态方法的

    输出
    

    8 return
    清理
    栈帧
    如果是最好一个栈帧,清理虚拟机栈

    栈帧
    虚拟机栈