JVM工作原理

JVM体系结构

jvm内部体系结构分三部分:类加载器  执行引擎 运行时数据区

  类加载器  加载.class文件。

      三个步骤:(1)装载。jvm通过ClassLoader 类名 包名将类的二进制字节码加载到jvm中完成类的加载工作。可以通过“类名+包名+ClassLoader实例ID”来标识一个被加载的类。

         (2)链接。加载完后,对二进制字节码格式进行验证,初始化加载类的静态变量并赋值为默认值,最后对类中方法、属性进行验证,确保其需要调用的属性、方法存在及具备相应权限(验证public private等)。

         (3)初始化。执行类中的静态初始化代码、构造器代码以及静态属性的初始化。以下四种情况初始化过程被触发:调用new 反射调用类中方法 子类调用初始化  jvm启动过程中指定的初始化类。

    java对象模型成为“OOP-Klass‘‘。一个java对象包括两部分,OOP和Klass,OOP指java实例对象,Klass指java类的信息。

    jvm运行加载一个Class时,会在jvm内部创建一个instanceKlass对象,存在于方法区,表示这个类的运行时元数据(即类的基本信息)。创建这个Class的java对象时,会在堆内创建一个instanceOop来表示这个java 对象,对象的引用放在jvm栈中。

  执行引擎  执行字节码或者执行本地方法(native方法 系统底层方法)

      JVM通过执行引擎来完成字节码的执行,JVM采用自己的一套指令系统。每个线程在创建后,都会产生一个程序计数器(pc)和栈(Stack),其中程序计数器中存放了下一条将要执行的指令,Stack中存放栈帧(Stack Frame)。JVM是基于栈来运行的,当一个线程调用一个对象的方法时,会在它的JVM栈的栈顶创建一个栈帧(Frame)的数据结构,这个数据结构是用来保存方法的局部变量,操作数栈,动态连接(java 对象的引用)和方法返回值的。通过参数传递的值和在方法中new出来的对象的引用都保持在局部变量表里面。操作数栈用于存放指令运算的中间结果,指令负责从操作数栈中弹出参与运算的操作数,指令执行完毕后再将计算结果压回到操作数栈,当方法执行完毕后则从Stack中弹出,继续其他方法的执行。

  运行时数据区 方法区 堆 栈 PC寄存器 本地方法栈

     PC寄存器  PC寄存器是用于存储每个线程下一步将执行的JVM指令,如该方法为native的,则PC寄存器中不存储任何信息
     JVM栈  JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中(栈帧)存放的为当前线程中局部基本类型的变量,部分返回结果以及函数的参数值,操作数栈,非基本类型的对象的JVM栈上仅存放一个指向堆上的地址(即java 对象的引用)
       堆(Heap) Heap是大家最为熟悉的区域,它是JVM用来存储对象实例以及数组值的区域,可以认为java中所有通过New创建的对象的内存都在此分配,Heap中的对象的内存需要等待GC进行回收。
       方法区域(Method Area)(1)方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,可见方法区域的重要性,同样,方法区域也是全局共享的,在一定的条件下它也会被GC;当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。
                          (2)在Sun JDK中这块区域对应的为Permanet Generation,又称为持久代,默认为64M,可通过-XX:PermSize以及-XX:MaxPermSize来指定其大小
       运行时常量池(Runtime Constant Pool)
                        类似C中的符号表,存放的为类中的固定的常量信息、方法和Field的引用信息等,其空间从方法区域中分配。
       本地方法堆栈(Native Method Stacks)
                        JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态

  

注:转自网络 只为学习。
时间: 2024-10-13 22:24:46

JVM工作原理的相关文章

JVM工作原理学习笔记

首先要了解的 数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型. 基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置.基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress引用类型包括:类类型,接口类型和数组. 堆与栈 栈是运行时的单位,而堆是存储的单位.栈解决程序的运行问题,即

详解JVM工作原理和特点

在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.本文将为大家讲解JVM工作原理和特点,希望对大家有所帮助. AD:网+线下沙龙 | 移动APP模式创新:给你一个做APP的理由>> JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装载并处理class类. 在我们运行和调

JVM工作原理(转自http://www.cnblogs.com/jiayi/archive/2010/06/08/1753863.html)

作为一种阅读的方式了解下jvm的工作原理 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装载并处理class类. 在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.JVM是Java程序运行的环境,但是他同时一个操作系统的一个应用程序一个进程,因此他也有他自己的运行的生命

JVM 工作原理

VM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装载并处理class类. = GC 基础 ===================== JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中Heap = {Old + NEW = { Eden , from, to } }JV

Java 详解 JVM 工作原理和流程

作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(JavaAPI).它们的关系如下图所示: 运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执

JVM工作原理之一:JVM装载与启动(转)

简述 众所周知java.exe是java class文件的执行程序,但实际上java.exe程序只是 一个执行的外壳,它会装载jvm.dll(windows下,以下皆以windows平台为例, linux下和solaris下其实类似,为:libjvm.so),这个动态连接库才是java 虚拟机的实际操作处理所在.本文探究java.exe程序是如何查找和装载jvm.dll 动态库,并调用它进行class文件执行处理的. 源代码 本文分析之代码,<JavaTM 2 SDK, Standard Edi

JVM工作原理 - 内存空间

大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) ,   VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack  ( 本地方法栈 ),其中Method Area 和  Heap 是线程共享的  ,VM Stack,Native Method Stack  和Program Counter Register  是非线程共享的.为什

(转)Java 详解 JVM 工作原理和流程

作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(Java API).它们的关系如下图所示: 运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码

JVM 工作原理和流程

作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(Java API).它们的关系如下图所示: 运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码