免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 770 | 回复: 0
打印 上一主题 下一主题

JVM之数据区结构 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-12 19:37 |只看该作者 |倒序浏览

JVM之数据区结构
作者:未知 来源:互联网 文章类型:Jsp技术 加入时间:2006-8-26
1.PC寄存器  
每个线程有一个PC寄存器,如果不是Native,则PC寄存器包含当前正在执行的Java虚拟机指令的地址,如果是Native则不定义。
2.Stack  
线程私有,与线程同时创建的Java Stack。一个JVM Stack保存多个Frame,Frame用来保存局部变量,部分结果,和方法返回值。Stack不一定是连续分配在内存中的。
       与Stack相关的异常有
1 固定大小的Stack会StackOverflowError
2 动态大小的Stack会OutOfMemoryError。

3.Heap
JVM有一个所有线程共享的Heap。Heap保存类的实例和数组。存储在Heap里的内容由GC回收。Heap可以使动态的也可以是固定大小的。它不一定是连续分配在内存中的。
       与Heap相关的异常有OutOfMemoryError。
4.方法区
JVM有一个所有线程共享的方法区。方法区类似于UNIX的text segment。它用来保存常数池,Field,方法数据,已经方法的代码,构造函数(包括类实例化和接口初始化时的特殊方法,和)。方法区可以是固定的,也可以使动态的。虽然方法区是Heap的一部分,但是可以选择不被GC回收或者被压缩。它不一定是连续分配在内存中的。
与方法区相关的异常有OutOfMemoryError。

       表示构造函数,表示不带参数并且是静态的类或者接口的初始化方法。
5.运行期常数池
       加载到内存中的Class文件内常数池Table就是运行期常数池。它包括各种常数,符号,和方法,域的引用。运行期常数池分配在方法区里。当JVM创建类或接口时,该类或接口的常数池也会加载到内存中。
与常数池相关的异常有OutOfMemoryError。
6.Native方法Stack
       JVM可以使用C Stacks支持Native方法。Native方法是非Java语言实现的方法。Native方法Stack也可以用在用C语言或者其他语言实现JVM指令集解释器上。如果不能使用Native方法或者不依赖于C Stacks的JVM不用提供Native方法Stack。
       Native方法Stack在每个线程创建时被线程分配。它可以是固定大小,也可以是动态的。
       与Native方法Stack相关的异常有
1固定大小的Stack会StackOverflowError
2 动态大小的Stack会OutOfMemoryError。
6.Frames(翻译成框架可不好)
       一个Frame用来保存数据和部分结果。他也用来执行动态链接,返回方法值和调度异常。
       每次方法被调用的时候会创建一个新Frame。当方法调用结束时,Frame被Destroy。Frame是JVM 线程Stack的一部分。每个Frame有它自己的本地变量数组,操作数Stack和一个当前方法的运行期常数池的引用(指针)。
       本地变量数组的大小和操作数Stack的大小取决于编译期间与方法代码。在一个线程内,只能有一个Frame是Active状态,这个Frame所关联的方法一定是在运行中,这个Frame叫做当前Frame,它所在的方法叫做当前方法,所在的类叫当前类。
       如果当前方法调用另一个方法,或者当前方法结束,这当前Frame停止。
       Frame不能被其他线程访问。
6.1 本地变量
       每个Frame有一个本地变量数组。大小取决于方法的代码。一个变量保存一个boolean, byte, char, short, int, float, 引用,或者返回地址的值。2个变量可以保存一个long 或者double值。
       JVM使用本地变量传递方法调用的参数。
6.2 操作数Stack
       每个Frame保存一个 LIFO Stack作为操作数Stack。当Frame建立的时候操作数Stack为空。JVM提供指令加载本地变量中的常量或值到操作数Stack。然后从操作数Stack中取值,计算,返回结果到操作数Stack。操作数Stack也用来准备传给方法的参数和接受方法的返回结果。

6.3 动态链接
       每个Frame包含一个当前方法运行期常数池的引用。该引用为了支持方法代码的动态链接。一个方法是通过符号引用来调用其他方法和方法变量的。动态链接将这些符号引用翻译为具体的方法引用(地址)。动态链接将加载所需的类解析尚未定义的符号。



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/26170/showart_199180.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP