JVM——结构

Java体系:

JDK(Java development Kit)包括:java程序设计语言,java虚拟机,java API类库。如图:

Java技术体系:Java Card(Applets),Java ME(Micro Edition),Java SE(Standard Edition),Java EE(Enterprise Edition)。

Jvm结构概念:
   
运行时数据区域(Runtime Data Areas)

Jvm定义了一组运行时数据区域,这些区域在Jvm运行程序时使用。一些区域在JVM启动的时候就被创建,在JVM关闭时销毁。还有些区域是每个线程所有的。线程启动时创建,线程结束时销毁。

pc 寄存器(Program Counter Register)

JVM支持多线程,每个线程都有自己的pc寄存器。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果是native的,这个计数器值则为空(Undefined)。

Jvm栈
    虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表,操作栈,动态链接,方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈道出栈的过程。栈的局部变量主要存放一些基本类型的变量(int,short, long, byte, float, double, boolean, char),对象句柄(reference类型)和returnAddress类型。

本地方法栈(Native Method Stacks)

本地方法栈于虚拟机栈所发挥的作用非常相似,区别是虚拟机栈为虚拟机执行Java方法服务,本地方法栈则是为虚拟机使用到的Native方法服务。

Java堆(Heap)
   Jvm有一个堆,所有Jvm中的线程共享这个堆。所有的类对象实例和数组都分配在堆上。Jvm堆在Jvm启动的时候被创建。Jvm提供一个垃圾收集者来管理堆。堆上的对象不需要程序员显式地销毁。堆可以是固定大小,也可以根据需要增加大小。堆可以是不连续的。

方法区域(Method Area)
    所有Jvm中的线程共享这个区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即使编译器编译后的代码等数据。

运行时常量池(Runtime Constant Pool)

运行时常量池是方法区的一部分。Class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池。

Jvm结构说明:

1.每个Java虚拟机实例都有一个方法区以及一个堆,它们是由该虚拟机实例中所有线程共享的。

2.每个线程被创建时,都将得到自己的PC寄存器以及一个Java栈。任何线程都不能访问另一个线程的PC寄存器或者Java栈。

3.数据类型:基本类型和引用类型:

4.方法区:

1)对方法区数据的访问是线程安全的。

2)方法区的大小不必是固定的,虚拟机可以根据应用的需要动态调整。方法区也不必是连续的,方法区可以在一个堆(甚至是虚拟机自己的堆)中自由分配。虚拟机允许用户或者程序员指定方法区的初始大小以及最小和最大尺寸等。

3)方法区也可以被垃圾回收。

4)方法区中储存的信息:

    • 这个类型的全限定名。
    • 这个类型的直接超类的全限定名(除非这个类是java.lang.Object,它没有超类)
    • 这个类型是类类型还是接口类型。
    • 这个类型的访问修饰符(public,abstract或final的某个子集)
    • 任何直接超接口的全限定名的有序列表。
    • 该类型的常量池。
    • 字段信息。
    • 方法信息。
    • 除了常量以外的所有类(静态)变量。
    • 一个到类ClassLoader的引用。
    • 一个到Class类的引用。

5.执行引擎

1)运行中Java程序的每一个线程都是一个独立的虚拟机执行引擎的实例。

2)JVM的指令集以栈为中心,而非以寄存器为中心,使得在那些只有很少的寄存器,或者寄存器很没有规律的机器上实现Java更便利。

PS:

1.Class类使得运行程序可以访问方法区中保存的信息(及反射的原理)。

2.数组是真正的对象,和其他对象一样,数组总是存储在堆中。

参考资料:
《深入理解java虚拟机》

《深入Java虚拟机》

转自:http://blog.csdn.net/thomescai

JVM——结构,布布扣,bubuko.com

时间: 2025-01-02 09:37:04

JVM——结构的相关文章

JVM结构、GC工作机制详解

JVM结构.内存分配.垃圾回收算法.垃圾收集器. 一.JVM结构 根据<java虚拟机规范>规定,JVM的基本结构一般如下图所示: 从左图可知,JVM主要包括四个部分: 1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中.(右图表示了从java源文件到JVM的整个过程,可配合理解. 关于类的加载机制,可以参考http://blog.csdn.net/tonytfjing/article/details/47212291) 2.执行引擎:负责执行

深入理解JVM结构

JVM结构探究---- 1.JVM结构示意图 2.JVM运行时数据区 1)程序计数器(Program Counter Register) 程序计数器是用于存储每个线程下一步将执行的JVM指令,如该方法为native的,则程序计数器中不存储任何信息 2)JVM栈(JVM Stack) JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean.char.byte.short.int.long.float.d

jvm结构浅析

jvm全称是Java Virtual Machine(java虚拟机).它之所以被称之为是"虚拟"的,就是因为它仅仅是由一个规范来定义的抽象计算机.我们平时经常使用的Sun HotSpot虚拟机只是其中一个具体的实现(另外还有BEA JRockit.IBM J9等等虚拟机).在实际的计算机上通过软件来实现一个虚拟计算机.与VMWare等类似软件不同,你是看不到jvm的,它存在于内存. 当启动一个Java程序时,一个虚拟机实例也就诞生了.当该程序关闭退出,这个虚拟机实例也就随之消亡.如果

通俗易懂理解JVM结构

通俗易懂理解JVM结构 说明:本篇内容是结合网上各位大牛的关于JVM的文章,通过作者的理解,希望以一种比较易懂的方式,让各位朋友们理解JVM到底是怎么一回事儿,其中部分图片和内容引用来自于网络,如有雷同,请见谅~~ 一.JVM内存区域模型是啥样? 这个是JVM大致的内存分布模型,看起来比较直观: 这个是更精细化的JVM内存模型,区别主要是方法区和堆是公共内存区,其他是私有的: 1.方法区: 也称"永久代" ."非堆", 它用于存储虚拟机加载的类信息.常量.静态变量.

业余草分享面试题,JVM结构、GC工作机制详解

题外话:最近在应聘阿里2015暑期实习,感触颇多.机会总是留给有准备的人的,所以平常一定要注意知识的巩固和积累.知识的深度也要有一定的理解,不比别人知道的多,公司干嘛选你?关于JVM和GC,我相信学java的绝大部分人都听过,很多公司的面试官都爱问,一开始我也很头痛,问这么底层干什么,所以我每次面试也只是看看答案敷衍了事.最近面完阿里感觉真不能这样,知识不仅要知其然,还要知其所以然.其实弄懂了JVM和GC,对我们理解很多java知识都有帮助.网上有很多关于GC和JVM的文章,这篇博文主要是根据我

好程序员Java分享JVM结构

好程序员Java分享JVM结构,jvm的基本结构,也就是我们俗称概述.内容很多,而且概念量也很大,关于概念方面,让概念在你的脑子里变成图形,所以只要你有耐心.仔细,发挥自己的想象力,会让你充满信心.当然,不是说看完,就对jvm了解啦,jvm学习的知识非常的多.在你看完,后续我们还会来学jvm的细节,但是如果你在看完的前提下去学习,再学习其他jvm的细节会事半功倍. 1.什么是java虚拟机 首先我们先写一个类 然后打开cmd窗口输入:java test.JVMForJava,打开任务管理器-进程

Java核心知识点-JVM结构之常量池

触摸java常量池 java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下. 理论 小菜先拙劣的表达一下jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂. 本地方法栈是jvm调用操作系统方法所使用的栈. 虚拟机栈是jvm执行java代码所使用的栈. 方法区存放了一些常量.静态变量.类信息等,可以理解成class文件在内存中的存放位置. 虚拟机堆是jvm执行java代码所使用的堆. Java中的

lesson2-java虚拟机之jvm结构

 网上找了一大圈,对于java虚拟机,还是不清不楚.这张算是比较靠谱的图了.自己参考Java虚拟机规范 Java SE7版,研究了下java虚拟机的结构,浅显理解吧.下面根据这个图,理解下各个部分. 以上是JAVA虚拟机的结构图,这张图对应了很多jvm机制,比如java的类加载和执行机制,比如java的垃圾回收机制.本文专注于java虚拟机的结构. 在了解java虚拟机的结构之前,我们先大概了解下java虚拟机中可以操作的数据类型. 与java语言类似,jvm可以操作的数据类型可以分为两类:

老李分享:jvm结构简介 2

2.2.4 Program counter regsiters:程序计数器 类似于PC寄存器,是一块较小的内存区域,通过程序计数器中的值寻找要执行的指令的字节码,由于多线程间切换时要恢复每一个线程的当前执行位置,所以每个线程都有自己的程序计算器.这一个区域不会有OutOfMemeryError.当执行Java方法时,这里存储的执行的指令的地址,如果执行的是本地方法,这里的值是Undefined 2.2.5 Java stack:虚拟机栈 虚拟机栈也是线程私有的,每创建一个线程,虚拟机就会为这个线