JVM学习笔记之一:体系结构

原创
2014/01/13 09:13
阅读数 692

    jvm的全称是Java Virtual Machine,即java虚拟机,它是构建于操作系统内存中一个虚拟软件,用于支持java程序的运行,是java之所以能够跨平台的关键。对java开发者来说,jvm既重要,又不重要。说它重要是因为我们的每一个程序,每一行代码,都必须通过它才能运行。说他不重要则是因为就算对它一无所知,实际上也不影响绝大部分java开发者日常工作。但是作为一个开发者,对技术孜孜不倦的求索精神应该是我辈的本能。

    当一个java程序被运行时,一个java虚拟机实例也就随之被创建。如果启动多个java程序,对应的,就会有多个虚拟机实例存在于内存中。一言以蔽之,jvm先java程序而生,后Java程序而亡。

    那么一个jvm有哪些组成部分呢?如下图所示:

    

    上图就是jvm的构成图,也就是jvm的基本体系结构,可以看到,jvm大体上可以分为四大部分:

    1. class loader,也就是类加载器。它的作用是查找符合java class格式的类文件(也就是图中的class files),并将之加载进Runtime Data Area。值得一提的是,只要文件符合.class文件的格式要求,就会被它加载,至于是否能够顺利运行,就不是它的职责了。

    2.Runtime Data Area,顾名思义,运行时数据区。java程序运行时数据管理,对象的生成与消亡,内存的分配与回收都发生在这个区域。也是程序员主要关注的区域,一般意义上的jvm优化指的就是针对这个区域的优化,它由以下几个部分构成:

        <1> stack,也就是java栈。栈是java程序运行的关键,java中的每一个线程都会有一个与之相对应的线程栈。里面存储的信息都是跟当前线程相关的信息,包括局部变量,程序运行状态,方法返回值等。每一次方法的调用都将作为一个整体帧被压入栈中,遵循"先入后出"原则。不同的栈无法访问彼此的数据,栈中只能存储基本类型和堆中对象的引用。

        <2> heap,堆内存。堆负责java对象信息的存储,堆中的内容可以被多个栈共享,堆的存在,使得java多个线程之间可以共享数据。每一个java虚拟机都只有一个堆内存,它主要由三个部分构成:年轻代、老年代、永久代,对堆内存的分配与垃圾的回收机制是jvm优化的一个极端重要的课题,这部分留待在后续的学习笔记中介绍。

        <3>method area,方法区。该区域被所有线程所共享,主要用于存储java类信息,常量,静态变量等。

        <4>PC Register,程序计数器。每一个java线程都有一个自己的pc register,它的内容总是指向下一条被执行指令的地址,不做深究。

        <5>native method stack,本地方法栈。其作用类似于java栈,不同之处是它负责存储本地方法的调用信息,也就是当java程序调用native方法时,其相关的运行信息将被压入本地方法栈,而不是Java栈。

    3. Execution Engine,执行引擎,也叫解释器。负责解释命令,执行字节码或本地方法。太偏向于底层,不做深究。

    4.Native Interface,本地接口。它赋予了java调用由其它语言编写而成的接口的能力,通过执行引擎加载执行,现在的用处较少,有兴趣的同学可自行学习。

    以上种种,构成了一个完整的jvm,通过相互间的配合,保障了java程序的运行。了解它们,有时可以帮助我们解决一些部署时的疑难杂症,个人认为还是值得一学的。

   

展开阅读全文
打赏
2
17 收藏
分享
加载中
GameKing博主

引用来自“chape”的评论

问博主两个个问题,
1. heap=New(Eden,from,to)+Old(Tenured),还是heap=New(Eden,from,to)+Old(Tenured)+Perm?
2. Perm区和方法区都是保存类信息和常量,他们的区别?

1.实践表明:heap=New(Eden,from,to)+Old(Tenured);
2.Perm是hotspot VM特有的概念,实际上应该可以认为它就是方法区或者说方法区的一部分,这块有争论,看各自的理解
2014/02/18 16:57
回复
举报
问博主两个个问题,
1. heap=New(Eden,from,to)+Old(Tenured),还是heap=New(Eden,from,to)+Old(Tenured)+Perm?
2. Perm区和方法区都是保存类信息和常量,他们的区别?
2014/02/18 15:24
回复
举报
更多评论
打赏
2 评论
17 收藏
2
分享
返回顶部
顶部