java虚拟机1.7_《Java虚拟机原理》7.1 精选 —— 总览
1.一个程序在 JVM 中运行的完整流程
java程序执行流程.JPG
说明:
① 类加载器把字节码加载到方法区
② 方法区的字节码被 JVM new,在堆内存中生成字节码对象
③ 字节码对象被 GC 的要求有:该类没有在其他任何地方被引用;该类的所有的实例对象都已被 GC;该类的类加载器的实例已被 GC
2.Java 虚拟机的生命周期
JVM 的生命周期可以分为启动、运行、退出。
(1) 启动
JVM 的启动过程是类加载,通过类加载器把二进制字节码加载到 JVM。
类加载器采用双亲委派模型, 其类型有 3 种:
① Bootstrap ClassLoader 启动类加载器:负责加载系统类和 /lib 目录的 jar 和类,例如 String
② ExtClassLoader 扩展类加载器:负责加载 /lib/ext 目录下的 jar 和类
③ AppClassLoader 应用程序类加载器:负责加载当前应用 ClassPath 的 jar 和类
④ UserDefinedClassLoader 用户自定义加载器:负责加载用户自定义的 jar 和类
示例如下,执行 main 方法,需要加载 Test01。根据双亲委派模型即向上检查、向下加载,JVM 从 AppClassLoader、ExtClassLoader 到 Bootstrap ClassLoader 检查和加载 Test01。Test01 是用户自定义类,Test01 没有指定父类即默认父类是 Object 类,被
AppClassLoader 加载。
public class Test01 {
public static void main(String[] args) {
System.out.println("123");
}
}
类的生命周期:
① 加载:通过全类名获取该类的二进制字节流、将字节流所代表的静态存储结构转换为方法区的运行时数据结构、在内存中生成一个代表该类的 Class 对象(方法区数据的访问入口);
② 验证:验证文件格式、字节码验证、魔数验证
③ 准备:分配内存给类变量,并设置类变量初始值。如果是基本数据类型,就会给他们设置默认值;
④ 解析:将常量池内的符号引用替换为直接引用
⑤ 初始化:new 指令、getstatic 指令、putstatic 指令、invokestatic 指令、 java.lang.reflect 的反射等
⑥ 使用:用户程序使用
⑦ 卸载:该类的所有的实例对象都已被GC、该类没有在其他任何地方被引用、该类的类加载器的实例已被GC
(2) 运行
一个JVM 进程的运行,实际上是 Java 程序的运行。当程序运行结束后,JVM 进程也就结束。
JVM 的守护线程:
Java 有 2 种进程,User Thread 用户线程、Daemon Thread 守护线程。例如,用户线程是指用户自定义的 main 函数,而守护线程是服务于用户线程的,例如 GC 垃圾回收线程。两种线程的生命周期是一致的,前者优先级高于后者的。
(3)退出
JVM 的退出有多种场景,如下所示。
① 程序正常结束运行
② 程序中调用 System.exit() 等方法
③ 程序运行过程中,遇到异常错误终止
④ 操作系统、硬件原因导致 JVM 进程被结束
java虚拟机1.7_《Java虚拟机原理》7.1 精选 —— 总览相关推荐
- 南邮java实验报告,南邮微机原理实验报告精选.doc
南邮微机原理实验报告精选 <微型计算机原理与接口技术> 上机实验 学 院: 电子科学与工程 专 业: 电磁场与无线技术 姓 名: 陈秀慧 课 程 号: B0300062S 学 号: 任课老 ...
- java虚拟机工作原理图_Java虚拟机工作原理
首先我想从宏观上介绍一下Java虚拟机的工作原理.从最初的我们编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文 ...
- Java虚拟机(一)结构原理与运行时数据区域
前言 本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关知识,Java虚拟机也并不是三言两语能够介绍完的,因此开了Java虚拟机系列,这一篇文章我们来学习Java虚拟 ...
- JAVA虚拟机 安全区域_JVM虚拟机如何枚举根节点:原理、安全点和安全区域
原标题:JVM虚拟机如何枚举根节点:原理.安全点和安全区域 枚举根节点--可作为GC Roots的节点 可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的 ...
- 写给Java程序员的Java虚拟机学习指南
大家好,我是极客时间<深入拆解Java虚拟机>作者.Oracle Labs高级研究员郑雨迪.有幸借这个专题的机会,能和大家分享为何Java工程师要学Java虚拟机?如何掌握Java虚拟机? ...
- JAVA 文件编译执行与虚拟机(JVM)简单介绍
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...
- java 内存泄露 书籍_java虚拟机内存溢出和泄漏实例
测试参数设置: 1.循环调用new A()实现堆溢出,java.lang.OutOfMemoryError: Java heap space, 虚拟机参数:-Xms1M -Xmx1M -XX:+Hea ...
- 为什么虚拟机上一运行就显示程序停止_五分钟学Java:如何学习Java面试必考的JVM虚拟机...
原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java ...
- Java虚拟机(六)——虚拟机栈
文章目录 虚拟机栈 虚拟机栈概述 出现背景: 优点 缺点 内存中的栈和堆 基本内容 Java虚拟机栈是什么 生命周期 作用 栈的优点 常见的错误有哪些 栈的存储单位 栈的运行原理 栈帧的内部结构 局部 ...
- 为什么虚拟机上一运行就显示程序停止_五分钟学Java:如何学习Java面试必考的JVM虚拟机||CSDN博文精选...
作者:黄小斜 原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java面试中总是爱考一类问题, ...
最新文章
- Hadoop2.7.3完全分布式搭建
- 【转:理论知识】SAP在建工程转固定资产
- 位数不足前面补0mysql语句_MySQL查询添加0到少于9位数字?
- XP系统,CMD窗口总是只显示最后一屏的信息,如何能让全部信息都显示出来呢??
- 2017.9.6数学
- 柳传志与马云绸缪宏观经济“冬天影子”
- 用C语言操作MySQL数据库
- 从Loagistic 到 SVM算法
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(7) - 混洗指令 解组合指令
- Java 第五章 类的设计与包
- 天正多条线段长度lisp下载_预习丨人教版六年级数学(上册)全册知识要点梳理,可下载...
- SPOJ DQUERY D-query(主席树 区间不同数个数)
- c语言 由函数组成的数组,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的_考题宝...
- CSS去除链接虚线(兼容IE6、IE7)
- 正则去除汉字和只取数字
- 终极算法---读书笔记
- DRV8833直流电机驱动模块代替 TB6612FNG电机驱动
- pandas安装了但是import不了
- python概率分布拟合_用Python实现概率分布
- 在vue.js中实现a标签href tel的打电话功能
热门文章
- ORACLE JOB 失败 查看,Oracle JOB异常中断原因分析
- 怎么挖linux内核的漏洞,linux内核漏洞分析实战看看专家是怎么一步步...-卓优商学院问答...
- python if语句 for语句 while语句
- txt文本变为粗体_如何在PHP中使文本变为粗体?
- java中intvalue_Java Short类intValue()方法及示例
- 回溯算法n皇后问题_使用回溯算法的N Queen问题和解决方案
- 嗯,查询滑动窗口最大值的这4种方法不错....
- 面试突击 002 | Redis 是如何处理已过期元素的?
- VC函数中的延时操作
- CentOS7 搭建Kafka消息队列环境,以及Python3操作Kafka Demo