• 老李分享:jvm结构简介 2


    2.2.4 Program counter regsiters:程序计数器

                类似于PC寄存器,是一块较小的内存区域,通过程序计数器中的值寻找要执行的指令的字节码,由于多线程间切换时要恢复每一个线程的当前执行位置,所以每个线程都有自己的程序计算器。这一个区域不会有OutOfMemeryError。当执行Java方法时,这里存储的执行的指令的地址,如果执行的是本地方法,这里的值是Undefined

        

        

    2.2.5 Java stack:虚拟机栈

        虚拟机栈也是线程私有的,创建一个线程,虚拟机就会为这个线程创建一个虚拟机栈,虚拟机栈表示Java方法执行的内存模型,每调用一个方法,就会生成一个栈帧(Stack Frame)用于存储方法的本地变量表、操作栈、方法出口等信息,当这个方法执行完后,就会弹出相应的栈帧。

           如果请求的栈的深度过大,虚拟机可能会抛出StackOverflowError异常,如果虚拟机的实现中允许虚拟机栈动态扩展,当内存不足以扩展栈的时候,会抛出OutOfMemoryError异常

        每一个线程都会

        栈帧:

           1.局部变量区

            局部变量区被组织一个一个从0开始的字数组,byte、short、char在存储前被转换为int,boolean也被转换为int,0表示false,非0表示true,long和double占据两个字长。

           2.操作数栈

            操作数栈也被组织为一个字数组,但不同于局部变量区,它不是通过数组下标访问的,而是能过栈的Push和Pop操作,前一个操作Push进的数据可以被下一个操作Pop出来使用。

           3.栈数据区

                        a)         常量池中的数据解析

                        b)        方法执行完后处理方法返回,会恢复调用方法现场

                        c) 方法执行过程中抛出异常时的异常处理,存储有一个异常表,当出现异常时虚拟机查找相应的异常表看是否有对应的Catch语句,如果没有就抛出异常终止

          

    2.3  Execution Engine 运行引擎

                 JIT Compiler: just-in-time Compiler及时编译

                 Garbage Collector:垃圾回收

    三.JVM运行

            这里非常粗糙的模拟下jvm的运行方式

  • 相关阅读:
    教你用纯Java实现一个网页版的Xshell(附源码)
    Learn Terraform--Getting Started--Installing Terraform
    Install Terraform on Windows, Linux and Mac OS
    Installing kubectl
    Creating a Cron Job in K8S
    Patch multi versions of windows via Power shell
    Bash to check SSL cert expired
    K8S dashboard 创建只读账户
    K8S Link
    Kubernetes
  • 原文地址:https://www.cnblogs.com/poptest/p/5064116.html
Copyright © 2020-2023  润新知