您的位置:首页 > 其它

JVM初学笔记

2015-12-17 16:01 176 查看

JVM概念

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

    JVM屏蔽了与具体平台相关的信息,Java语言编译程序只需生成在Java虚拟机上运行的目标代码(.class字节码)即可,这就是java语言跨平台这一优点的由来。

JVM产品

    目前主流的JVM有Oracle / Sun公司的HotSpot VM,JRockit VM,IBM的J9 VM。其中HotSpot 是绝对的主流,下文也是根据它做的分析。

JDK,JRE,JVM之间的关系



    JRE包含JVM和一些java API;
    JDK包含JRE和一些java开发工具和监控工具;

JVM结构

   




    由上图可见,JVM有四个部分:类加载器子系统、运行时数据区域(内存空间)、执行引擎和本地方法接口。

    其中:内存空间有五个部分:java堆、方法区、java栈、本地方法栈和程序计数器。

类加载器子系统(classloader)
负责把编译好的.class文件加载到内存(方法区)中。

执行引擎
JVM执行java字节码文件的核心。主要有四种执行方式:解释执行、编译执行、自适应优化执行和硬件芯片执行。

本地方法接口(JNI---java native interface)
JNI主要有两种使用场景:
a) 在方法中调用非java语言开发的  
b) 在方法中用java直接操作硬件平台
本地方法的缺点:不方便而且不安全,也丢失了java的跨平台特性。

运行时数据区域(内存空间)

    由上图可以看出,java堆和方法区是所有线程共享的,需要注意同步问题。java栈、本地方法栈和程序计数器都是线程私有的。
    a) java堆:存储对象实例和数组值,通过new创建的对象实例都是存在这里的。
      


    java堆主要分了两大部分:年轻代和老年代
    年轻代:新创建的对象实例在伊甸园区(正如起名,繁衍新生之地)存储,如果空间不足了会把其中还存活的对象移动到两个幸存区(s0好s1是对称的,没有先后关系)

    老年代:历经几次GC后还存活的对象会移至老年代
    b) 方法区
      主要存储JVM加载的类信息,静态变量,final修饰的类、方法及变量。
      方法区对应了JVM的持久代(PermanetGeneration)
    c) java栈:

      主要存储执行中java方法的参数、局部变量、操作数和中间结果等。
      每个方法被执行时都会同时创建一个栈帧( Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息,每一个方法被调用直至执行完成的过程,
  就对应着一个栈帧在java栈中从入到出栈的过程。

    d) 本地方法栈

      存储native方法调用的状态,用于本地方法的执行
    e) 程序计数器

      类似与CPU中的pc寄存器,用来存储指令地址(执行java方法时),如果执行的是本地方法,则值为Undefined。

JVM的生命周期  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: