知识大全 JVM的内部体系结构浅析

Posted 虚拟机

篇首语:听闻少年二字,当与平庸相斥。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JVM的内部体系结构浅析相关的知识,希望对你有一定的参考价值。

JVM的内部体系结构浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    jvm全称是Java Virtual Machine(java虚拟机) 它之所以被称之为是 虚拟 的 就是因为它仅仅是由一个规范来定义的抽象计算机 我们平时经常使用的Sun HotSpot虚拟机只是其中一个具体的实现(另外还有BEA JRockit IBM J 等等虚拟机) 在实际的计算机上通过软件来实现一个虚拟计算机 与VMWare等类似软件不同 你是看不到jvm的 它存在于内存         当启动一个Java程序时 一个虚拟机实例也就诞生了 当该程序关闭退出 这个虚拟机实例也就随之消亡 如果在同一台计算机上同时运行三个Java程序 将得到三个Java虚拟机实例 每个Java程序都运行于它自己的Java虚拟机实例中         Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域 根据《Java虚拟机规范(第 版)》的规定 Java虚拟机所管理的内存将会包括以下几个运行时数据区域 如下图 所示                                                                     图 Java虚拟机的内部体系结构        下面先对图中各部分做个简单的说明         class文件 虚拟机并不关心Class的来源是什么语言 只要它符合Java class文件格式就可以在Java虚拟机中运行 使用Java编译器可以把Java代码编译为存储字节码的Class文件 使用JRuby等其他语言的编译器一样可以把程序代码编译成Class文件         类装载器子系统 负责查找并装载Class 文件到内存 最终形成可以被虚拟机直接使用的Java类型         方法区 在类装载器加载class文件到内存的过程中 虚拟机会提取其中的类型信息 并将这些信息存储到方法区 方法区用于存储已被虚拟机加载的类信息 常量 静态变量 即时编译器编译后的代码等数据 由于所有线程都共享方法区 因此它们对方法区数据的访问必须被设计为是线程安全的         堆 存储Java程序创建的类实例 所有线程共享 因此设计程序时也要考虑到多线程访问对象(堆数据)的同步问题         Java栈 Java栈是线程私有的 每当启动一个新线程时 Java虚拟机都会为它分配一个Java栈 Java栈以帧为单位保存线程的运行状态 虚拟机只会直接对Java栈执行两种操作 以帧为单位的压栈或出栈 当线程调用java方法时 虚拟机压入一个新的栈帧到该线程的java栈中 当方法返回时 这个栈帧被从java栈中弹出并抛弃 一个栈帧包含一个java方法的调用状态 它存储有局部变量表 操作栈 动态链接 方法出口等信息         程序计数器 一个运行中的Java程序 每当启动一个新线程时 都会为这个新线程创建一个自己的PC(程序计数器)寄存器 程序计数器的作用可以看做是当前线程所执行的字节码的行号指示器 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 分支 循环 跳转 异常处理 线程恢复等基础功能都需要依赖这个计数器来完成 如果线程正在执行的是一个Java方法 这个计数器记录的是正在执行的虚拟机字节码指令的地址 如果正在执行的是Natvie方法 这个计数器值则为空(Undefined)         本地方法栈 本地方法栈与虚拟机栈所发挥的作用是非常相似的 其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务 而本地方法栈则是为虚拟机使用到的Native方法服务 任何本地方法接口都会使用某种本地方法栈 当线程调用Java方法时 虚拟机会创建一个新的栈帧并压入Java栈 然而当它调用的是本地方法时 虚拟机会保持Java栈不变 不再在线程的Java栈中压入新的帧 虚拟机只是简单地动态链接并直接调用指定的本地方法 如果某个虚拟机实现的本地方法接口是使用C连接模型的话 那么它的本地方法栈就是C栈         执行引擎 负责执行字节码 方法的字节码是由Java虚拟机的指令序列构成的 每一条指令包含一个单字节的操作码 后面跟随 个或多个操作数 执行引擎执行字节码时 首先取得一个操作码 如果操作码有操作数 取得它的操作数 它执行操作码和跟随的操作数规定的动作 然后再取得下一个操作码 这个执行字节码的过程在线程完成前将一直持续 cha138/Article/program/Java/hx/201311/25838

相关参考

知识大全 详解JVM内存结构组成

详解JVM内存结构组成  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  你对JVM内存结构是否了解

知识大全 深入了解JVM内存结构

深入了解JVM内存结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  你对JVM内存结构是否熟悉

知识大全 详细介绍JVM结构基础

详细介绍JVM结构基础  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JVM执行的对象就是大家非

知识大全 JVM内存结构

JVM内存结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ()类装载子系统  装载连接初始化

知识大全 JVM运行时内存空间结构

JVM运行时内存空间结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JVM执行Java程序的

知识大全 浅析Java内部类在GUI设计中的作用(1)

浅析Java内部类在GUI设计中的作用(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于

知识大全 浅析Java内部类在GUI设计中的作用(2)

浅析Java内部类在GUI设计中的作用(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  四方

知识大全 浅析Struts 体系结构与工作原理(图)

浅析Struts体系结构与工作原理(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  基本概念

知识大全 浅析C#语言实现堆和队列数据结构

浅析C#语言实现堆和队列数据结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  1线性聚集基础 

心脏内部结构怎样

心脏的内部结构较为复杂。心脏是一个由肌肉构成的空腔脏器,它分为右心房、右心室、左心房和左心室,房与室之间有房室口相通,但左右心房之间、左右心室之间正常时互不相通,分别有房中隔、室中隔分隔。  心脏内部