JVM学习笔记:JVM的体系结构与JVM的生命周期
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的生命周期的更多相关文章
- 《深入Java虚拟机学习笔记》- 第7章 类型的生命周期/对象在JVM中的生命周期
一.类型生命周期的开始 如图所示 初始化时机 所有Java虚拟机实现必须在每个类或接口首次主动使用时初始化: 以下几种情形符合主动使用的要求: 当创建某个类的新实例时(或者通过在字节码中执行new指令 ...
- React 学习笔记(1) 基础语法和生命周期
参看:视频地址 简单搭建一个react-cli: 2. React.createElement() 将object转化为 React语法 import React from 'react' impor ...
- JVM学习笔记(一):JVM初探
1 来源 来源:<Java虚拟机 JVM故障诊断与性能优化>--葛一鸣 章节:第一章 本文是第一章的一些笔记整理. 2 Java里程碑 2.1 Java起源 1990年Sun公司决定开发一 ...
- JVM学习笔记(三):JVM基本参数
1 来源 来源:<Java虚拟机 JVM故障诊断与性能优化>--葛一鸣 章节:第三章 本文是第三章的一些笔记整理. 2 GC日志:-Xlog:gc 要打印GC日志的话,可以加上-Xlog: ...
- JVM学习笔记(二):JVM基本结构
1 来源 来源:<Java虚拟机 JVM故障诊断与性能优化>--葛一鸣 章节:第二章 本文是第二章的一些笔记整理. 2 JVM基本参数-Xmx java命令的一般形式如下: java [- ...
- Android学习笔记(十五)——碎片的生命周期(附源代码)
碎片的生命周期 点击下载源代码 与活动类似.碎片具有自己的生命周期.理解了碎片的生命周期后.我们能够在碎片被销毁时正确地保存事实上例,在碎片被重建时将其还原到前一个状态. 1.使用上一篇的项目Frag ...
- vue学习笔记(四)——Vue实例以及生命周期
1.Vue实例API 1.构造器(实例化) var vm = new Vue({ //选项 |-------DOM(3) | |-------el (提供一个在页面上已存在的 DOM 元素作为 V ...
- Java框架spring 学习笔记(三):Bean 的生命周期
当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态.当bean不再需要,并且从容器中移除时,需要做一些清除工作.为了定义安装和拆卸一个 bean,我们只要声明init-metho ...
- JS学习笔记(4)--js变量的生命周期
http://www.cnblogs.com/williamxiao/p/3499973.html 最近看国外经典教材的时候发现JavaScript与熟知的Java,C,C++都不同的特性,其中一个就 ...
- Servlet学习笔记04——什么是重定向,servlet生命周期?
1.重定向 (1)什么是重定向? 服务器通知浏览器访问一个新的地址. 注: 服务器可以通过发送一个302状态码及一个 Location消息头(该消息头的值是一个地址,一般 称之为重定向地址)给浏览器, ...
随机推荐
- 漂浮QQ
漂浮QQ 点击下载
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
概要 前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...
- Lowest Common Ancestor of a Binary Tree
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
- Linux shell的输入输出
echo --echo命令可以显示文本行或变量,或者把字符串输入到文件 --echo [option] string -e 解析转义字符 例如:echo -e "nimenhao\nasfd ...
- rpc框架之 thrift 学习 2 - 基本概念
thrift的基本构架: 上图源自:http://jnb.ociweb.com/jnb/jnbJun2009.html 底层Underlying I/O以上的部分,都是由thrift编译器生成的代码, ...
- JAVA CDI 学习(1) - @Inject基本用法
CDI(Contexts and Dependency Injection 上下文依赖注入),是JAVA官方提供的依赖注入实现,可用于Dynamic Web Module中,先给3篇老外的文章,写得很 ...
- WP8.1中C++的winodws运行时组件位移操作的差异
最近学习WP8.1应用开发,想把C语言的SM3国密算法移植到手机app中.由于把C语言的代码转换成C#代码工作量较大,因此只能用winodws运行时组件来实现. SM3国密算法是一种HASH算法,具体 ...
- 给大一的学弟学妹们培训java web的后台开发讨论班计划
蓝旭工作室5月大一讨论班课程计划 课时 讨论班性质 讨论班名称 主要内容 主讲人 第一讲 先导课 后台开发工具的使用与MySQL数据库基础 后台开发工具的基本使用方法与工程的创建,MySQL数 ...
- Windows下Memcache的安装及PHP扩展配置
一.下载 找到完整的memcache的Windows安装包,解压放在硬盘上,比如 F:\memcached.exe 二.安装 WIN7 64位双击打开这个exe可能只有一个空的窗口,不能输入任何命令, ...
- 【算法之美】你可能想不到的归并排序的神奇应用 — leetcode 327. Count of Range Sum
又是一道有意思的题目,Count of Range Sum.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/leetcode ...