1 JVM在java平台中的位置

1.1 Java平台组成

Java平台主要由Java虚拟机和Java API这两部分组成。参考Oracle官网

1.2 java平台结构图

JDK1.2开始,迫于Java运行始终笔C++慢的压力,JVM的结构也慢慢发生了一些变化,JVM在某些场景下可以操作一定的硬件平台,一些核心的Java库甚至也可以操作底层的硬件平台,从而大大提升了Java的执行效率。JDK1.2之后的整个java平台如下图所示:

1.3 JVM与JRE、JDK的关系

参照Oracle官网的介绍可知,JVM与JRE、JDK的关系如下:

JVM:负责执行符合规范的Class文件。

JRE:包含JVM与类库。

JDK:包含JRE与一些开发工具,如javac、javap等。

1.4 java虚拟机在整个程序流程中的位置

2 JVM的体系结构

2.1 什么是虚拟机

模拟执行某种指令集体系绌构的软件。有多种分类,比如进程虚拟机(高级语言虚拟机),系统虚拟机,协设计虚拟机。

2.2什么是Java虚拟机

(1)有多层含义:

  • 一套规范:Java虚拟机规范,定义概念上Java虚拟机的行为表现。
  • 一种实现:例如HotSpot、J9、JRockit。需要实现JVM规范,但具体实现方式不需要与“概念中”的JVM一样。
  • 一个运行中的实例:某个JVM实现的某次运行的实例。

(2)只要输入符合规范的Class文件即可执行。

(3)并非一定要执行“Java”程序,可以支持其他语言,比如Groovy,Jython等。

2.3 概念中JVM体系结构

2.4 JVM的内部体系结构分为三部分

(1)类装载器(ClassLoader)子系统

作用:用来装载.class文件。

(2)执行引擎

作用:执行字节码,或者执行本地方法。

(3)运行时数据区

方法区,堆,java栈,PC寄存器,本地方法栈。

3 JVM的生命周期

3.1 两个概念:JVM实例和JVM执行引擎实例

(1)JVM实例对应了一个独立运行的java程序,它是进程级别。

(2)JVM执行引擎实例则对应了属于用户运行程序的线程,它是线程级别的。

3.2 JVM的生命周期

(1)JVM实例的诞生

当启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点。

(2)JVM实例的运行

main()作为该程序初始线程的起点,任何其他线程均由该线程启动。

JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以标明自己创建的线程是守护线程。

(3)JVM实例的消亡

当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出。

4 Class文件

4.1 Class文件所记录的信息

(1)结构信息

  • Class文件格式版本号
  • 各部分的数量与大小

(2)元数据

  • 类/ 继承的超类/ 实现的接口的声明信息
  • 域与方法声明信息
  • 常量池
  • 用户自定义的、RetentionPolicy为CLASS或RUNTIME的注解
  • ——对应Java源代码中“声明”与“常量”对应的信息

(3)方法信息

  • 字节码
  • 异常处理器表
  • 操作数栈与局部变量区大小
  • 操作数栈的类型记录(StackMapTable,Java 6开始)
  • 调试用符号信息(如LineNumberTable、LocalVariableTable)
  • ——对应Java源代码中“语句“与“表达式”对应的信息

4.2 class文件不只是字节码

字节码只代表程序逻辑,只是Class文件众多组成部分其中之一。

参考资料

莫枢JVM技术分享PPT。

淘宝应届生培训 JVM工作原理PPT。

http://yhjhappy234.blog.163.com/blog/static/3163283220122204355694/

JVM学习笔记:JVM的体系结构与JVM的生命周期的更多相关文章

  1. 《深入Java虚拟机学习笔记》- 第7章 类型的生命周期/对象在JVM中的生命周期

    一.类型生命周期的开始 如图所示 初始化时机 所有Java虚拟机实现必须在每个类或接口首次主动使用时初始化: 以下几种情形符合主动使用的要求: 当创建某个类的新实例时(或者通过在字节码中执行new指令 ...

  2. React 学习笔记(1) 基础语法和生命周期

    参看:视频地址 简单搭建一个react-cli: 2. React.createElement() 将object转化为 React语法 import React from 'react' impor ...

  3. JVM学习笔记(一):JVM初探

    1 来源 来源:<Java虚拟机 JVM故障诊断与性能优化>--葛一鸣 章节:第一章 本文是第一章的一些笔记整理. 2 Java里程碑 2.1 Java起源 1990年Sun公司决定开发一 ...

  4. JVM学习笔记(三):JVM基本参数

    1 来源 来源:<Java虚拟机 JVM故障诊断与性能优化>--葛一鸣 章节:第三章 本文是第三章的一些笔记整理. 2 GC日志:-Xlog:gc 要打印GC日志的话,可以加上-Xlog: ...

  5. JVM学习笔记(二):JVM基本结构

    1 来源 来源:<Java虚拟机 JVM故障诊断与性能优化>--葛一鸣 章节:第二章 本文是第二章的一些笔记整理. 2 JVM基本参数-Xmx java命令的一般形式如下: java [- ...

  6. Android学习笔记(十五)——碎片的生命周期(附源代码)

    碎片的生命周期 点击下载源代码 与活动类似.碎片具有自己的生命周期.理解了碎片的生命周期后.我们能够在碎片被销毁时正确地保存事实上例,在碎片被重建时将其还原到前一个状态. 1.使用上一篇的项目Frag ...

  7. vue学习笔记(四)——Vue实例以及生命周期

    1.Vue实例API 1.构造器(实例化) var vm = new Vue({ //选项 |-------DOM(3) |   |-------el (提供一个在页面上已存在的 DOM 元素作为 V ...

  8. Java框架spring 学习笔记(三):Bean 的生命周期

    当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态.当bean不再需要,并且从容器中移除时,需要做一些清除工作.为了定义安装和拆卸一个 bean,我们只要声明init-metho ...

  9. JS学习笔记(4)--js变量的生命周期

    http://www.cnblogs.com/williamxiao/p/3499973.html 最近看国外经典教材的时候发现JavaScript与熟知的Java,C,C++都不同的特性,其中一个就 ...

  10. Servlet学习笔记04——什么是重定向,servlet生命周期?

    1.重定向 (1)什么是重定向? 服务器通知浏览器访问一个新的地址. 注: 服务器可以通过发送一个302状态码及一个 Location消息头(该消息头的值是一个地址,一般 称之为重定向地址)给浏览器, ...

随机推荐

  1. 你所未知的3种 Node.js 代码优化方式

    from:https://cnodejs.org/topic/56cc2fd6c045c3743304bec6 Node.js 程序的运行可能会受 CPU 或输入输出操作的限制而十分缓慢.从 CPU ...

  2. 在Java代码中使用pdfBox将PDF转换为图片

    生成图片 // 生成图片 PDDocument pd = PDDocument.load(new File(filePath)); PDFRenderer pdfRenderer = new PDFR ...

  3. IntelliJ IDEA运行tomcat项目编码错误, 及如何指定tomcat编码

    刚开始用IDEA, 在跑dubbo开发时, 发现一个很奇怪的问题, 远程调用服务端的方法时, 传入的中文参数会变成GBK编码. 经过好长时间的跟踪终于把问题定位到了IDEA里配置的Tomcat. 凡是 ...

  4. 深入理解Java之线程池

    原作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本文归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  5. Visual Studio 2012 cannot identify IHttpActionResult

    使用ASP.NET Web API构造基于restful风格web services,IHttpActionResult是一个很好的http结果返回接口. 然而发现在vs2012开发环境中,Syste ...

  6. 利用ganymed-ssh2远程执行其它Linux机器上的shell命令

    实际应用中,有时候需要从web管理界面上,远程去启动其它linux主机上的程序,利用ssh协议可以方便的满足这一需求.事实上hadoop架构中,从nn上启动dn时,就是利用了免密码ssh登录.gany ...

  7. XStream、JAXB 日期(Date)、数字(Number)格式化输出xml

    XStream.Jaxb是java中用于对象xml序列化/反序列化 的经典开源项目,利用它们将对象转换成xml时,经常会遇到日期(Date).数字按指定格式输出的需求,下面是使用示例: 一.日期字段格 ...

  8. 利用writing-mode实现元素的垂直居中

    writing-mode是CSS3的新特性之一,使用场景不是很多.这个属性主要是改变文档流的显示方式.具体的介绍参考这篇文章:http://www.zhangxinxu.com/wordpress/2 ...

  9. Oracle 常用操作【02】数据库特性

    1. 导出 oracle 注释 -- 表明細+表注释+字段明细+字段注释 a.一个用户下的表明細+表注释+字段明细+字段注释 select ATC.OWNER, atC.TABLE_NAME, utc ...

  10. C#调用百度静态地图

    来深圳一年多了,感觉深圳的IT氛围确实比长沙好,工作和生活节奏比较快,适合于学习.来深后一直在现在所在的公司,部门从开始4个人,发展到现在10来人了,感觉还是不错的. 发现自己很少写博客了,倒不是学得 ...