码迷,mamicode.com
首页 > 其他好文 > 详细

老李分享:jvm结构简介 2

时间:2015-12-21 19:55:04      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

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的运行方式

技术分享

老李分享:jvm结构简介 2

标签:

原文地址:http://www.cnblogs.com/poptest/p/5064116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!