JVM体系结构概述
ClassLoader(类装载器)
负责加载class文件。
class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine(执行引擎)决定。

虚拟机自带的加载器
- 启动类加载器(Bootstrap)
- 扩展类加载器(Extension)
- 应用程序类加载器(AppClassLoader)也称系统类加载器。 加载当前应用的classpath下的所有类。
用户自定义加载器
Java.lang.ClassLoader的子类,用户可以定制类的加载方式。

sun.misc.Launcher它是一个java虚拟机的入口应用。
Execution Engine(执行引擎)
负责解释命令,提交操作系统执行。
Native Interface(本地接口)
作用是融合不同的编程语言为Java所用。它的初衷是融合C/C++程序。
Java诞生的时候是C/C++横行的时候,要想立足,必须有调用C/C++程序,于是就在内存中专门开辟了一块区域处理标记为
native的代码。 它的具体做法是Native Method Stack中登记native方法,在Execution Engine执行时加载native libraies。
目前该方法使用的越来越少了,除非是与硬件有关的应用。 比如,通过Java程序驱动打印机或者Java系统管理生产设备,在企业级应用中已经比较少见。 因为,现在的异构领域间的通信很发达。 比如,可使用Socket通信,也可使用Web Service等等,不多做介绍。
Native Method Stack(本地方法栈)
它的具体做法是Native Method Stack中登记
native方法,在Execution Engine执行时加载本地方法库。
Program Counter Register(程序计数器)
也叫PC寄存器。每个线程都有一个程序计数器,是线程私有的。就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可忽略不记。
这块内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令。
如果执行的是一个native方法,那这个计数器是空的。
Method Area(方法区)
方法区是被所有线程共享。所有字段和方法字节码,以及一些特殊方法,如构造器,接口代码也在此定义。
简单说,所有定义的方法的信息都保存在该区域,此区属于共享区间。 静态变量、常量、类信息(构造器/接口定义)、运行时常量池存在方法区中。
但,实例变量存在堆内存中,和方法区无关。
Stack 栈
栈也叫栈内存,主管Java程序的运行,是在线程创建时创建。
它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题,只要线程一结束,该栈就Over,生命周期和线程一致,是线程私有的。
8种基本类型的变量、对象的引用变量、实例方法都是在函数的栈内存中分配的。
栈存储什么
- 本地变量(Local Variables):输入参数和输出参数以及方法内的变量。
- 栈操作(Operand Stack):记录出栈、入栈的操作。
- 栈帧数据(Frame Data):包括类文件、方法等等。
栈运行原理
栈中的数据都是以栈帧(Stack Frame)的格式存在。 栈帧是一个内存区块,是一个数据集,是一个有关方法和运行期数据的数据集。
当一个方法A被调用时就产生了一个栈帧F1,并被压入到栈中。 A方法又调用了B方法,于是产生栈帧F2也被压入栈, B方法又调用了C方法,于是产生栈帧F3也被压入栈, …… 执行完毕后,先弹出F3栈帧,再弹出F2栈帧,再弹出F1栈帧……
遵循“先进后出”/“后进先出”原则。(联想下【装子弹】)
每个方法执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
每个方法从调用直至执行完毕的过程,就对应着一个栈帧在虚拟机中入栈到出栈的过程。 栈的大小和具体JVM的实现有关,通常在256K~756K之间。

图示在一个栈中有两个栈帧: 栈帧2是最先被调用的方法,先入栈,然后方法2又调用了方法1,栈帧1处于栈顶的位置,栈帧2处于栈底,执行完毕后,依次弹出栈帧1和栈帧2,线程结束,栈释放。
每执行一个方法都会产生一个栈帧,保存到栈(后进先出)的顶部,顶部栈就是当前的方法,该方法执行完毕后会自动将此栈帧出栈。

栈、堆、方法区的交互关系

HotSpot是使用指针的方式来访问对象。 Java堆中存放访问类元数据的地址。 reference存放的是对象的地址。
三种JVM
- S
using System.Collections; 2 using System.www.yongxinzaixian.cn Collections.Generic; 3 using www.yongshiyule178.com UnityEngine; 4 using UnityEngine.EventSystems; 5 6 public class ParentHandler : MonoBehaviour, IPointerClickHandler, IPointerDownHandler,www.yun-shengyl.com IPointerUpHandler 7 { 8 public void OnPointerClick(PointerEventData eventData) 9 { 10 Debug.Log("Parent OnPointerClick" + eventData.ToString()); 11 } 12 13 public www.qwert888.com/ void OnPointerDown(PointerEventData eventData) 14 { 15 Debug.Log("Parent OnPointerDown" + eventData.ToString()); 16 } 17 18 public void OnPointerUp(www.gouyiflb.cn/ PointerEventData eventData) 19 { 20 Debug.Log("Parent OnPointerUp" + eventData.ToString()); 21 } 22 }

1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using UnityEngine.EventSystems; 5 6 public class ChildHandler : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler 7 { 8 public void OnPointerClick(PointerEventData eventData) 9 { 10 Debug.www.bsyLptvip.com Log("Child OnPointerClick" + eventData.ToString()); 11 } 12 13 public void OnPointerDown(PointerEventData eventData) 14 { 15 Debug.Log("Child OnPointerDown" + eventData.ToString()); 16 } 17 18 public void OnPointerUp(PointerEventData eventData) 19 { 20 Debug.www.suoLaiervip.com Log("Child OnPointerUp" + eventData.ToString()); 21 }un公司的HotSpot
- BEA公司的www.yunshenpt.com JRockit
- IBM公司的J9 www.shengyunyule.cn VM
JVM体系结构概述的更多相关文章
- JVM 体系结构概述 (一)
一.jvm运行在操作系统之上的,它与硬件没有直接交互: 二.JVM体系结构概览 JVM的基本结构:类加载器.执行引擎.运行时数据区.本地方法接口: 过程:class文件 ----> 类加载器 - ...
- 46张PPT讲述JVM体系结构、GC算法和调优
本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传可供下载 ...
- [转帖]Java虚拟机(JVM)体系结构概述及各种性能参数优化总结
Java虚拟机(JVM)体系结构概述及各种性能参数优化总结 2014年09月11日 23:05:27 zhongwen7710 阅读数 1437 标签: JVM调优jvm 更多 个人分类: Java知 ...
- Java虚拟机(JVM)概述
JVM(Java虚拟机)是一个抽象的计算模型.就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域.目的是为构建在其上运行的应用程序提供一个运行环境.JVM可以解读指令代码并与底 ...
- [转帖]JVM总结--JVM体系结构
JVM总结--JVM体系结构 https://blog.csdn.net/samjustin1/article/details/52215274 需要不断的学习才可以. 2016年08月15日 22: ...
- 转:用C++实现的一种插件体系结构-----概述
用C++实现的一种插件体系结构-----概述 本文讨论一种简单却有效的插件体系结构,它使用C++,动态链接库,基于面向对象编程的思想.首先来看一下使用插件机制能给我们带来哪些方面的好处,从而在适当时候 ...
- JVM体系结构之三:方法区之2(jdk1.6,jdk1.7,jdk1.8下的方法区变迁)
方法区 方法区存储虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据.HotSpot中也称为永久代(Permanent Generation),(存储的是除了Java应用程序创建的对象之 ...
- 第七章 JVM体系结构与工作方式
JVM能跨计算机体系结构来执行Java字节码,主要是由于JVM屏蔽了与各个计算机平台的软件和硬件之间的差异. 7.1 JVM体系结构 7.1.1 何谓JVM 模拟一个计算机来达到一个计算机所具有的计算 ...
- JVM体系结构之一:总体介绍
一.Java的内存区域划分 Java 虚拟机在执行Java程序的时候会把它管理的内存区域划为几部分,这一节我们就来解析一下Java的内存区域. Java的内存区域主要分为五部分: 程序计数器(PC) ...
随机推荐
- 亲测可以永久破解2018版本的pycharm
pycharm是很强大的开发工具,但是每次注册着实让人头疼.网络上很多注册码.注册服务器等等.但都只是一年或者不能用:为次有如下解决方案.亲测有效!!! 如果想让pycharm永久被激活,比如截止日到 ...
- @SuppressWarnings("resource")
Suppress 抑制:镇压:废止 Warnings警告 @SuppressWarnings("resource")是J2SE 提供的一个批注.该批注的作用是给编译器一条指令,告 ...
- 搭建私服-docker registry
Docke官方提供了Docker Hub网站来作为一个公开的集中仓库.然而,本地访问Docker Hub速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用.Docker仓库实际上提供两方 ...
- Linux系统mysql使用(二)
一.查看某数据库的表 # 假设此时数据库名为hiveuse hive; show tables;
- 虚拟机Ubuntu图形界面进入命令行快捷键
ctrl+alt+f2 https://jingyan.baidu.com/article/03b2f78c69e5c25ea337ae40.html https://www.zabbix.com/d ...
- MyEclipse配置tomcat报错 - java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported major.minor version 51.0
1 开发Servlet程序时,MyEclipse配置好tomcat与JDK之后,启动时控制台报下列错误: 1 java.lang.UnsupportedClassVersionError: org/a ...
- [转帖]OS/2 兴 衰 史
OS/2 兴 衰 史 https://zhidao.baidu.com/question/12076254.html 最近在看windows的版本 感觉自己接触电脑太晚 知道的也是很少 不明白 之前有 ...
- [官网]How to configure the Microsoft Distributed Transaction Coordinator (MSDTC) on Linux
How to configure the Microsoft Distributed Transaction Coordinator (MSDTC) on Linux APPLIES TO: SQL ...
- liunx 运维知识一部分
一 克隆虚拟机 大家都需要做的克隆虚拟机,在克隆虚拟机之前,需要把网卡源的UUID和Mac地址全部删除掉.不然相同会冲突使用不了. 删除UUID跟Mac的操作步骤如下: cd /etc/sysc ...
- 保存后自动格式化代码(vscode)
痛点: 写项目的时候, 我们经常会拷贝一些代码, 每当拷贝过来都需要重新调整, 如果可以实现保存自动调整代码, 将会给我们带来很多的便利! 解决: 其实对于vscode来说, 实现这一点很容易. 我们 ...