一:Java虚拟机与程序的生命周期,如下几种情况Java虚拟机将结束生命周期
1,执行System.exit()方法
2,程序正常执行结束
3,程序执行过程中遇见到了异常或错误而异常终止
4,由于系统错误而导致Java虚拟机进程终止
二:Java程序对类的使用方式
1,主动使用(6种)
1):创建类的实例
2):访问某个类或静态变量,或者对静态变量赋值
3):调用类的静态方法
4):反射(如:Class.forName(“com.fov.IOTest”))
5):初始化一个类的子类
6):Java虚拟机启动的时候被标明的启动类(例如包含main方法的类)
*只有当程序访问类的静态变量或静态方法确实在当前类或当前接口中定义时,才可以认为是对类或接口的主动使用
当Java虚拟机初始化一个类的时候,要求它所有的父类都要被初始化,但是这不适合接口
*1):在初始化一个类的时候,并不会初始化它实现的接口
*2):在初始化一个接口的时候,并不会初始化它的父接口
因为一个父接口并不会因为它的子接口或者实现类被初始化而被初始化,只有当程序首次使用特定接口的静态变量的时候才会被初始化。
2,被动使用
除去主动使用外的都为被动使用
Java虚拟机必须在每个类或者接口被首次主动使用的时候才初始化他们
三:类的加载,连接与初始化
1,加载:是将类的.class文件的二进制文件读到内存中,将其放在运行时数据区的方法区里面,然后在堆内存创建一个java.lang.Class对象,用来封装在方法区内的数据结构。
1)加载类的方式:
1)),从本地系统中直接加载
2)),通过网络下载.class文件
3)),从zip,jar等归档文件中加载.class文件
4)),从专有的数据库中提取.class文件
5)),将Java源文件动态的编译为.class文件
2)类加载器种类:
1)),Java虚拟机自带的加载器
1))):根类加载器(Bootstrap)(c++编写无法在java代码中获得该类)
2))):扩展类加载器(Extension)(java实现)
3))):系统加载器(System)(java实现)
2)),用户自定义的类加载器
1))):java.lang.ClassLoader的子类
2))):用户可以通过定制类的加载方式
3),类加载器时间
1)):JVM允许类加载器在预料到某个类将要被使用的时候就预先加载它,如果预先加载的过程中遇到了某.class文件缺失或者错误,那么类加载器在程序首次使用该类的时候才报告错(LinkageError错误)
2)):如果该类一直没有被程序主动使用,那么类加载器就不会报告错误。
4),类加载器的父亲委托机制(Parent Delegation)
1)):根加载器(Bootstrap):该加载器没有父加载器。它负责加载虚拟机的核心类库,如 :java.lang.*,根加载器从系统属性sun.boot.class.path所指定的目录中加载类库,根加载器的实现依赖地层操作系统,它并没有继承java.lang.ClassLoader类
2)):扩展类加载器(Extension):它的父加载器为根类加载器〈父子加载器并不一定是继承关系〉,它从java.ext.dirs系统属性所指的目录中加载类库,或者从JDK的安装目录的jre//lib//ext子目录下加载类库,如果把用户创建的JAR文件放在这个目录下会自动被加载,该类是java.lang.ClassLoader类的子类。
3)):系统类加载器(System),也称为应用类加载器,它的父加载器为扩展加载器,它从环境变量classpath或者系统属性java.class.path所指定的目录加载类,它是用户自定的类加载器的默认父加载器,系统加载器是纯java类,是java.lang.ClassLoader类的子类。
5),定义类加载器
1)),如果某个类加载器能够加载一个类,那么该类加载器就称为定义类加载器,定义类加载器及起所有的子加载器都称为:初始类加载器
2)),当生成一个自定义的类加载器实例时,如果没有指定它的父加载器,那么系统加载器将是该类的父加载器。
3)),要创建类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定的类的名字返回对应的Class对象的引用。
2,连接:
1)验证:确保被加载的类的正确性
类被加载后,就进去到连接阶段,连接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时环境中去。
验证内容:类文件结构检查,语义检查,字节码验证,二进制兼容性的验证
2)准备:为类的静态常量分配内存,并将其初始化为默认值
3)解析:把类中的符号引用转换为直接引用
3,初始化:为类的静态的变量赋予正确的初始值<用户所赋值>
类的初始化步骤
1),假如该类没有被加载和连接,那就先进行加载和连接
2),假如该类存在直接父类,并且该父类没有被初始化,那就初始化该类的父类(跟构造方法一样)<接口不会,只有当程序首次使用特定接口的静态变量的时候才会导致该接口被初始化>
3),假如该类中存在初始化语句,那就依次初始化这些语句。
类的初始化就是上面的6种主动方式,其他的被动使用都不会导致类的初始化
- 大小: 56.4 KB
- 大小: 13.2 KB
- 大小: 72.7 KB
分享到:
相关推荐
### Java中的JDK、JRE与JVM解析 #### 一、引言 在Java编程领域,JDK、JRE和JVM这三个概念是至关重要的基础知识点。虽然它们经常被提及,但很多人仍然对它们之间的关系和各自的功能感到困惑。这篇文章将深入探讨这...
### JVM基本原理及结构详解 #### 一、Java虚拟机(JVM)的逻辑与物理结构 JVM,即Java Virtual Machine,是运行Java字节码的虚拟机环境,它的设计目的是为了提供一个独立于硬件的运行环境,使得Java程序可以在任何...
首先,我们需要理解JVM的基本概念。JVM是Java Virtual Machine的缩写,它是Java平台的核心组件之一。它的主要任务是将编译后的Java类文件(.class文件)中的字节码转换为特定平台的机器码,实现了Java的“一次编写,...
接下来,我们将详细阐述JVM的基本概念、架构组成以及其内部运作机制等关键知识点。 ### Java虚拟机(JVM)基本概念 Java虚拟机(JVM)是一种用于执行Java字节码的虚拟机,它是Java平台的核心组件之一。JVM使得Java程序...
JVM的基本结构 JVM由多个子系统和组件构成: - **类加载子系统**:负责加载类文件到JVM。 - **执行引擎**:执行字节码。 - **运行时数据区**:存储类的实例、方法数据、程序计数器等信息。 - **本地接口**:与操作...
### Java基础之JVM ...以上概述了JVM的基本概念及其核心组成部分,了解这些内容对于深入学习Java编程语言和提升编程效率至关重要。此外,掌握JVM的工作原理还有助于开发者更好地理解和优化Java应用程序的性能问题。
JVM内存的管理和优化是复杂且重要的,理解这些基本概念和原理对于解决内存泄漏、提高程序效率具有重要意义。在面试中,能够清晰地阐述这些知识并结合实际案例分析,无疑能展示出扎实的Java基础和技术功底。
### 深入理解JVM:Java虚拟机详解 ...以上概述了Java虚拟机(JVM)的基本概念及其关键组成部分,有助于深入理解Java程序是如何被加载、执行和管理的。这对于开发高效稳定的Java应用程序至关重要。
对于OSGi,你需要理解其基本概念,如bundle、manifest、服务注册等,以及如何在实际项目中应用OSGi,如使用Equinox或Felix作为OSGi运行时。 在提供的压缩包文件中,"java"可能包含Java语言基础、进阶特性、设计模式...
- **寄存器**:虽然JVM在概念上有一组寄存器,但实际实现中通常使用栈来存储数据,因为寄存器模型在大多数硬件上难以实现。 - **栈**:每个线程都有自己的操作栈,用于存储方法调用和局部变量。 - **堆**:用于...
通过研究和实现这样一个迷你版本的JVM,开发者可以深入了解JVM的内部结构,包括类加载机制、字节码解析、指令集架构以及内存模型等核心概念。 三、字节码解析 Java字节码是一种中间表示,它是Java源代码编译后的...
通过对Java虚拟机JVM的基本概念、架构以及内存管理机制的深入解析,我们可以更好地理解Java程序的执行过程。掌握JVM的工作原理有助于开发者编写更高效、更稳定的Java应用程序,并能有效地解决常见的内存溢出问题。
这份笔记首先会介绍JVM的基本概念,包括JVM的架构、内存模型以及类加载机制。 JVM架构主要分为以下几个部分:堆内存、栈内存、方法区、程序计数器和本地方法栈。堆内存是所有线程共享的区域,主要用于存储对象实例...
为了有效地使用这类工具,你需要了解一些基本的JVM内存管理概念,如新生代、老年代、永久代(对于较旧的JVM)或元空间(对于Java 8及以上版本),以及不同的垃圾收集器,如Serial、Parallel、CMS、G1、ZGC和...
下面我们将深入探讨JVM指令手册中的关键概念和知识点。 1. **字节码**:Java源代码编译后生成的是字节码文件(.class),这些文件包含了可被JVM理解的二进制指令。每个字节码指令由一个单字节的操作码(opcode)和...
《深入理解Java虚拟机》是Java开发者不可或缺的一本技术书籍,它揭示了Java程序运行时的内部机制,包括内存管理、类加载机制、字节码执行、垃圾收集等核心概念。下面将根据提供的信息,详细阐述Java虚拟机(JVM)的...
JVM的基本概念包括一套字节码指令集,该指令集为Java虚拟机定义了操作的最小单位;一组寄存器,用于存储字节码执行过程中的相关信息;一个栈,用于存放方法调用的参数、局部变量等;一个垃圾回收机制,用于自动管理...
本文将深入探讨如何在Java中获取JVM内存大小,包括堆内存的总量、最大值以及剩余空间,并解析给定代码片段中的关键概念。 ### JVM内存模型 在讨论如何获取JVM内存大小之前,首先需要理解JVM的内存布局。JVM内存...
#### 二、JVM基本结构 JVM主要由以下三个子系统构成: 1. **类加载子系统**:负责将Java类加载到JVM中,并进行解析和初始化。 2. **运行时数据区**:即通常所说的JVM内存结构,包括方法区、堆、栈、本地方法栈和...
然而,JVM的内部工作原理对于许多开发者来说仍然是一个神秘的概念。本文将探讨一个特殊的项目——"mini-jvm in rust",该项目是用Rust语言实现的一个小型Java虚拟机,旨在帮助开发者理解JVM的核心机制。项目名为"jvm...