每个JVM都是一个独立的进程。
由ClassLoader将Java的字节码文件加载到JVM中
1、每启动一个程序就启动了一个JVM,程序运行结束JVM就消亡。
JVM退出的几种场景:1、调用System.exit();
2、程序运行结束
3、程序遇到异常或者错误,如果main方法会将异常抛出给虚拟机
4、操作系统终止JVM
类的加载、连接、初始化。
1、加载:查找并加载类的二进制数据。
类的加载指的是将.class文件的二进制数据读入到内存当中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区的数据结构。同一个类的所有对象,只对应一个Class对象。Class类时整个反射机制的入口
2、连接:
验证:确保被加载类的正确性
准备:为类的静态变量分配内存、并将其初始化为默认值
解析:把类的符号引用转变为直接引用
3、初始化:为类的静态变量赋予正确的初始值。
Java程序对类的使用分为两种:主动使用和被动使用
主动使用:(1)创建类的实例(2)访问某个类或者接口的静态变量(3)调用类的静态方法
(4)反射:Class.forName();(5)初始化一个类的子类,可以看做是对父类的主动使用。
(6)Java虚拟机启动时被标明为启动类的类:包含main方法的类或者一个Java程序启动的入口
方法区存储的是Java类的数据结构,堆区存储的是类的实例对象。
类加载器分为两种:
(1)启动类的加载器:BootStrap/Extention/System
如果某个类的getClassLoder方法返回null,则说明该类是由根类加载器加载的。
(2)自定义类的加载器:ClassLoader
当被装载的类引用了其他的类的时候,虚拟机就会用装载第一个类的装载器来装载其他被引用的类。运行时Java程序中的每一个类都有他自己的命名空间。
Java虚拟机中的线程分为两类:守护线程和非守护线程。守护线程通常是由Java虚拟机自己使用的,比如执行垃圾回收任务的线程;Java程序也可以把它创建的线程标记为守护线程,Java程序中的初始线程(开始于main方法的线程)就是一个非守护线程。
Java程序初始类中的main方法,将作为程序初始线程的起点,程序中任何其他线程都是由该线程启动。
只要有任何非守护线程还在运行,则Java程序就还在运行,当所有的非守护线程结束时,Java程序也自动结束。
Java虚拟机的组成部分:类装载器,执行引擎,运行时数据区(方法区、堆区、栈区、PC寄存器、本地方法区)、本地方法接口。
分享到:
相关推荐
这是对学习Java虚拟机的很好的入门书。虚拟机的书很少,除了规范之外,就很少见了。
最早的一个研究jvm的书籍,曹晓钢的版本。可以对照周志明的一起研究!
《深入Java虚拟机》第二版是一本深受Java开发者喜爱的经典著作,它详尽地解析了Java虚拟机(JVM)的工作原理,涵盖了JVM的重要概念、设计与实现,以及优化策略。这本书对于理解Java程序的运行机制、提升性能调优能力...
Java虚拟机(JVM)是Java程序的核心组件,它负责执行字节码并管理程序的生命周期。当遇到以下四种情况时,JVM的生命周期将会结束:执行System.exit()方法、程序正常执行完毕、程序异常终止或者由于操作系统错误导致...
《深入Java虚拟机》这本书是IT领域中关于Java虚拟机(JVM)的深度解析之作,主要聚焦于JVM的工作原理、内部结构以及优化技巧。Java虚拟机作为Java语言的核心组件,其性能直接影响到Java应用程序的运行效率。因此,对...
深入 Java 虚拟机.pdf Java 虚拟机(Java Virtual Machine,JVM)是 Java 语言的 runtime 环境,是 Java 程序执行的核心组件。它提供了一个平台无关的环境,允许 Java 程序在不同的操作系统和硬件平台上运行。 一...
本书详细地介绍了java体系结构极其内部细节,了解这些内容才能更快速的编写高效的程序
深入理解Java虚拟机--类加载及执行子系统的案例与实战xmind文件
Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种...
《揭秘Java虚拟机-JVM设计原理与实现》这本书深入探讨了Java虚拟机(JVM)的工作原理及其在Java编程中的核心地位。Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是...
【深入理解Java虚拟机-文前1】 Java虚拟机(JVM)是Java技术体系的核心组成部分,它为Java程序提供了一个跨平台的运行环境。Java的广泛应用和广泛支持得益于其虚拟机的特性,它屏蔽了不同硬件和操作系统之间的差异...
Java虚拟机(JVM)是Java程序运行的核心组件,它为Java代码提供了跨平台的运行环境。深入理解JVM的工作原理对于优化Java程序性能、排查问题以及提升开发能力至关重要。以下将详细介绍JVM的主要组成部分、内存模型、...
java虚拟机不用多少了吧。 深入java虚拟机第二版.pdf
Java虚拟机(JVM)的类加载过程是Java程序运行的基础,它涉及到类加载器、类的生命周期和一系列复杂的步骤。在这个过程中,类加载器主要任务是根据类的全限定名加载二进制字节流并转化为`java.lang.Class`对象。整个...
深入Java虚拟机-思维导图,算是对深入Java虚拟机专栏的总结和梳理。
首先,我们来看《深入JAVA虚拟机》这本书,它涵盖了JVM的各个关键方面,包括指令集、运行时数据区、方法区、堆内存、栈帧结构、编译与优化、异常处理和安全性等。书中通过实例解析,帮助读者理解JVM如何处理Java程序...
《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...
Java虚拟机(JVM)是Java程序运行的基础,它提供了执行环境和各种内存区域,以支持Java代码的高效运行。本地方法栈是JVM的一部分,它主要负责处理与本地方法(通常是由C或C++编写)相关的调用。本地方法栈在Java线程...
深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字) Java序列化和反序列化是Java虚拟机中的一种重要机制,它们可以将Java对象转换为二进制数据,然后...