jvm的内部体系结构浅析

转自:http://www.cnblogs.com/evan2012/archive/2012/05/09/2489417.html html

1.jvm的内部体系结构浅析java

      2.jvm的几个运行时数据区域安全

      3.jvm的内存溢出异常多线程

    jvm全称是Java Virtual Machine(java虚拟机)。它之因此被称之为是“虚拟”的,就是由于它仅仅是由一个规范来定义的抽象计算机。咱们平时常常使用的Sun HotSpot虚拟机只是其中一个具体的实现(另外还有BEA JRockit、IBM J9等等虚拟机)。在实际的计算机上经过软件来实现一个虚拟计算机。与VMWare等相似软件不一样,你是看不到jvm的,它存在于内存。jvm

    当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。若是在同一台计算机上同时运行三个Java程序,将获得三个Java虚拟机实例。每一个Java程序都运行于它本身的Java虚拟机实例中。post

    Java虚拟机在执行Java程序的过程当中会把它所管理的内存划分为若干个不一样的数据区域。根据《Java虚拟机规范(第2版)》的规定,Java虚拟机所管理的内存将会包括如下几个运行时数据区域,以下图1所示。url

                                         

图1     Java虚拟机的内部体系结构spa

    下面先对图中各部分作个简单的说明:线程

1.class文件:虚拟机并不关心Class的来源是什么语言,只要它符合Java class文件格式就能够在Java虚拟机中运行。使用Java编译器能够把Java代码编译为存储字节码的Class文件,使用JRuby等其余语言的编译器同样能够把程序代码编译成Class文件。设计

2.类装载器子系统:负责查找并装载Class 文件到内存,最终造成能够被虚拟机直接使用的Java类型。

3.方法区:在类装载器加载class文件到内存的过程当中,虚拟机会提取其中的类型信息,并将这些信息存储到方法区。方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。因为全部线程都共享方法区,所以它们对方法区数据的访问必须被设计为是线程安全的。

4.堆:存储Java程序建立的类实例。全部线程共享,所以设计程序时也要考虑到多线程访问对象(堆数据)的同步问题。

5.Java栈:Java栈是线程私有的。每当启动一个新线程时,Java虚拟机都会为它分配一个Java栈。Java栈以帧为单位保存线程的运行状态。虚拟机只会直接对Java栈执行两种操做:以帧为单位的压栈或出栈。当线程调用java方法时,虚拟机压入一个新的栈帧到该线程的java栈中。当方法返回时,这个栈帧被从java栈中弹出并抛弃。一个栈帧包含一个java方法的调用状态,它存储有局部变量表、操做栈、动态连接、方法出口等信息。

 6.程序计数器:一个运行中的Java程序,每当启动一个新线程时,都会为这个新线程建立一个本身的PC(程序计数器)寄存器。程序计数器的做用能够看作是当前线程所执行的字节码的行号指示器。字节码解释器工做时就是经过改变这个计数器的值来选取下一条须要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都须要依赖这个计数器来完成。若是线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;若是正在执行的是Natvie方法,这个计数器值则为空(Undefined)。

7.本地方法栈:本地方法栈与虚拟机栈所发挥的做用是很是类似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。任何本地方法接口都会使用某种本地方法栈。当线程调用Java方法时,虚拟机会建立一个新的栈帧并压入Java栈。然而当它调用的是本地方法时,虚拟机会保持Java栈不变,再也不在线程的Java栈中压入新的帧,虚拟机只是简单地动态连接并直接调用指定的本地方法。若是某个虚拟机实现的本地方法接口是使用C链接模型的话,那么它的本地方法栈就是C栈。

8.执行引擎:负责执行字节码。方法的字节码是由Java虚拟机的指令序列构成的。每一条指令包含一个单字节的操做码,后面跟随0个或多个操做数。执行引擎执行字节码时,首先取得一个操做码,若是操做码有操做数,取得它的操做数。它执行操做码和跟随的操做数规定的动做,而后再取得下一个操做码。这个执行字节码的过程在线程完成前将一直持续。

 

相关的参考资料:

1.深刻Java虚拟机(原书第2版)

2.深刻理解Java虚拟机:JVM高级特性与最佳实践

3.互联网相关的文章

相关文章
相关标签/搜索