类在虚拟机内存中的生命周期:
——————————————————————
加载 Loading
验证 Verification |
准备 Preparation | 连接 Linking
解析 Resolution |
初始化 Initialization
使用 Using
卸载 Unloading
————————————————————————
解析的顺序不一定,可以在初始化阶段之后再开始,支持运行时绑定
类初始化:
1.new getstatic putstatic (final除外) invokestatic
2.使用java.lang.reflect包的方法对类进行反射调研
3.初始化子类触发父类初始化 (真正使用到父接口时,如定义的常量)
4.虚拟机启动,用户执行主类(包含main方法)
被动引用,不触发初始化方法:
1.通过子类引用父类的静态字段
2.通过数组定义来引用类
3.常量在编译阶段会存入调用类的常量池中,本质上没有直接引用到定义常量的表
=================================================
加载
1.通过一个类的权限定名来获取定义此类的二进制字节流 zip jar war applet proxy jsp db
2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3.在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口
验证
1.文件格式验证 正确解析并存储在方法区
2.元数据验证 语义校验,符合Java语言规范
3.字节码验证数据流和控制流分析 Halting Problem 1.6 -XX: -UseSplitVerifier关掉优化
4.符号引用验证符号引用中全限定名,符号描述,访问性 -Xverify:none
准备
正式为类变量分配内存并设置类变量初始值,在方法区分配。
注意实例变量和对象一起分配在堆中,不在这一过程。
final常量将会赋值,其他都是初始值 0 false ...
解析
1.类或接口解析
2.字段解析
3.类方法解析
4.接口方法解析
初始化
执行类构造器<clinit>
1.顺序收集所有类变量赋值动作和静态块
2.虚拟机会保证先调父类<clinit>
3.虚拟机会保证一个类<clinit>在多线程下加锁和同步
=================================================
类加载器
1.类与加载器确认唯一性
2.双亲委派模型 Parents Delegation Model
启动类加载器 Bootstrap ClassLoader
扩展类加载器Extension ClassLoader
应用程序类加载器 Application ClassLoader
自定义类加载器 User ClassLoader
除了顶层的启动类加载器外,其他都有自己的父类加载器,
父子关系使用组合来复用父加载器代码,优先调父类加载器加载类
3.非双亲委派模型
向前兼容,重写loadClass()
线程上下文类加载器 Thread Context ClassLoader JNDI JDBC JCE
程序动态性,代码热替换HotSwap
OSGi,网状结构的类加载器
1.将以java.*开头的类,委派给父类加载器加载
2.否则,将委派列表名单内的类,委派给父类加载器加载
3.否则,将Import列表中的类,委派给Export这个类的Bundle的类加载器加载
4.否则,查找当前Bundle的ClassPath,使用自己的类加载器加载
5.否则,查找类是否在自己的Fragment Bundle中,如果在,则委派给Fragment Bundle的类加载器加载
6.否则,查找Dynamic Import列表的Bundle,委派给对应的Bundle的类加载器加载
7.否则,类查找失败
分享到:
相关推荐
Java 虚拟机学习笔记: Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...
### 深入Java虚拟机JVM类加载学习笔记 #### 一、Classloader机制解析 在Java虚拟机(JVM)中,类加载器(ClassLoader)是负责将类的`.class`文件加载到内存中的重要组件。理解类加载器的工作原理对于深入掌握JVM以及...
Java 虚拟机(JVM)自动内存管理机制 Java 虚拟机(JVM)自动内存管理机制是 Java 语言的一大特色,它使得 Java 程序员无需手动管理内存,从而提高了开发效率和程序稳定性。JVM 自动内存管理机制主要通过 JVM 的...
Java虚拟机(JVM)是Java程序的核心组成部分,它负责执行字节码并管理程序运行时的内存。本文主要探讨JVM的类加载机制,包括类加载、连接、初始化等关键过程,以及类的主动使用和被动使用的情况。 首先,我们要理解...
虚拟机学习笔记 Java 虚拟机(JVM)是 Java 语言的 runtime 环境,负责加载、验证、执行 Java 字节码。以下是 JVM 相关知识点的总结。 1. 运行时数据区域 JVM 的运行时数据区域主要包括: * 堆(Heap):...
通过阅读《深入理解Java虚拟机》第三章,开发者不仅可以深入理解Java的安全机制,还能学习到如何在实际项目中实施这些安全策略,提升应用的安全性。对于想要从事Java开发或者对系统安全有深入了解需求的人来说,这一...
类装载器是JVM的重要组成部分,它的主要任务是从磁盘、网络或其他来源加载类文件。类装载器分为两类:Bootstrap ClassLoader(引导类加载器)和User-defined ClassLoader(用户自定义类加载器)。Bootstrap ...
总的来说,"深入理解Java虚拟机读书笔记之:第3章 安全(2)"主要涵盖了Java安全体系的核心概念,包括类加载器、权限模型、安全管理器以及相关工具的使用。理解这些内容对于任何希望构建安全、可靠的Java应用程序的...
### 学习笔记之Java虚拟机详解 #### 运行时数据区域概览 Java虚拟机(JVM)运行时数据区域主要包括以下几部分:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区以及运行时常量池。 1. **程序计数器**: -...
9. **JVM内部机制**:简述Java虚拟机的工作原理,包括类加载、内存管理、垃圾回收机制,有助于优化代码性能。 10. **泛型**:讨论Java泛型的使用,如何编写类型安全的代码,并理解其类型擦除的原理。 11. **枚举与...
### 深入理解Java虚拟机(JVM)的关键知识点 #### 一、Java与Java虚拟机的关系 Java语言的设计者们为了使Java程序能够跨平台运行,引入了一个概念——Java虚拟机(JVM)。简单来说,Java源代码在编译成`.class`...
**JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...
### 学习深入理解Java虚拟机的前几章笔记 #### JVM内存模型 Java虚拟机(JVM)的内存模型主要分为两大类:线程共享区和线程私有区。 ##### 线程共享区 - **堆**:是所有线程共享的内存区域,在这里存放着对象实例...
总结来说,了解Java虚拟机的学习笔记基础篇,可以帮助Java开发者更好地掌握Java程序的执行机制,理解类的加载、链接和初始化过程,以及JVM的内存模型和执行引擎的工作原理,从而编写出更加高效和稳定的Java应用程序...
字节码的执行需要经过三个步骤,首先由类装载器负责把类文件加载到 Java 虚拟机中,在此过程需要检验该类文件是否符合类文件规范;其次字节码校验器检查该类文件的代码中是否存在着某些非法操作,例如 applet 程序中...
### Java基础学习笔记知识点 #### 一、Java学习路线概览 Java学习通常分为几个阶段,从基础到高级,逐步深化。以下是对给定文件中提到的学习路线的详细解析: ##### 第一阶段:Java基础 - **JAVASE**:Java标准版...
13. **JVM原理**:理解Java虚拟机的工作方式,包括类加载、内存管理和垃圾回收机制,有助于优化程序性能。 14. **Java 8及更高版本的新特性**:例如lambda表达式、Stream API、Optional类等,这些新特性使Java编程...
Java虚拟机(JVM)是Java程序运行的核心,它是一个抽象的计算机系统,负责执行Java字节码。在深入理解JVM之前,我们先要明白什么是字节码:Java源代码经过编译后生成的中间表示,即.class文件,里面包含的就是字节码...
Java 类加载器是Java虚拟机(JVM)的重要组成部分,它负责将类的.class文件从文件系统或网络中加载到内存中,并将其转换为运行时的类对象。类加载器的这种动态加载机制为Java提供了极高的灵活性,使得程序可以在运行...
- **JVM(Java Virtual Machine)**:Java虚拟机,是实现Java跨平台的核心技术,它负责字节码的解释执行,并提供了统一的运行环境。 2. **Java程序执行过程** - Java源代码通过编译器编译成字节码文件(.class)...