主要内容包括:
1.类加载 / 类连接 / 类初始化
2.类加载器
JVM进程
类的加载
将类的class文件
(类的二进制数据)读入内存,并为之创建一个java.lang.Class对象。
写道
系统中的所有的类实际上也是对象(类加载时创建),都是java.lang.Class的实例
类加载由类加载器
完成,JVM会提供类加载器(系统类加载器),开发者也可以自定义。
通过使用不同类加载器,可以从以下来源加载类的class文件:
1.本地文件系统
2.JAR包
3.通过网络
4.把java源文件动态编译
,加载
写道
Java虚拟机规范允许预加载类
类的连接
负责把加载到内存中的类的二进制数据合并到JRE中,类的连接又可分为三个阶段:
1.验证
2.准备:为类的静态属性分配内存,并设置默认初始值。
3.解析
类的初始化
类的初始化主要对静态属性进行初始化
。有两种方式:
1.声明时初始化
2.静态初始化块(static{ })中初始化
注1:在类连接阶段已经为静态属性分配好了内存,并使用默认值初始化了。在类初始化阶段是利用上面两种方式使用指定值初始化。
注2:对于上面两种初始化方式,JVM会按这些语句在程序中的排列顺序依次执行。
注3:静态初始化块与类相关,会在类初始化时被执行。通常用于对类的静态属性执行初始化操作。
JVM初始化一个类的步骤:
1.假如这个类还没有被加载和连接,程序先加载并连接该类
2.假如该类的直接父类还没有被初始化,则先初始化其直接父类(如果直接父类也没有初始化呢?)
3.假如类中有初始化语句,则系统依次执行这些初始化语句。
注:初始化一个类不仅仅是针对该类初始化,还包括该类的直接父类和间接父类,一直上溯到java.lang.Object.
初始化时,先初始化顶层父类,依次向下。
类初始化时机
类加载器
一个类被载入JVM中,同一个类就不会被再次载入。何为“同一个类”?
一个载入JVM的类都有一个唯一的标识:类全名+其类加载器。
分享到:
相关推荐
8. **类的加载**:类加载器加载字节码到内存,对象状态存储在堆区,线程局部变量在栈区,类信息在方法区。经过字节码验证后执行。 9. **Java命令**:`javac`用于编译源代码,`java`执行类文件,`jdb`用于调试,`...
CoreJava DAY06 类的加载过程、实例化、继承、多态 20 CoreJava DAY07修饰符 26 CoreJava DAY08 常用类 29 CoreJava DAY09 高级语言特征 30 CoreJava DAY10 主方法,静态导入,包装类,枚举 32 CoreJava DAY11 内部...
CoreJava DAY06 类的加载过程、实例化、继承、多态 37 CoreJava DAY07修饰符 50 CoreJava DAY08 常用类 56 CoreJava DAY09 高级语言特征 58 CoreJava DAY10 主方法,静态导入,包装类,枚举 62 CoreJava DAY11 内部...
CLASSPATH:类加载器使用 让类加载器明确去哪里加载.class文件 通常不需要设置 默认值:. .:当前目录(.java) CLASSPATH相当于中国的低保制度 JAVA_HOME:其他的程序使用 WEB 设置方式: 1:一次性的设置 ...
- **注意**:通过ClassLoader可以灵活地加载类路径下的任何资源,但需要注意路径的正确性。 4. **Properties** - **用途**:用于处理`.properties`格式的文件,可以读取并解析这些文件中的键值对。 - **示例**:...
- 方法区(Method Area):存储已加载类的信息,包括类变量。与堆一样,方法区也是线程共享的,存在同步问题。当方法区空间耗尽时,可能会抛出`java.lang.OutOfMemoryError: PermGen full`异常。 - Java栈(Java ...
javacore.txt文件用jca打开,heapdump.phd文件用ha打开。...包括 Java 虚拟机的参数,环境变量,内存段的分配情况,垃圾回收日志,各种内部锁的状态,各线程在当前时刻的运行栈,以及类加载状态等。
14. **反射**:反射允许在运行时动态地获取类的信息并操作类的对象,包括类加载、获取类的方法和属性、调用方法等。 15. **枚举与注解**:枚举用于定义固定的常量集,注解用于提供元数据,增强代码的可读性和可维护...
如果你的Java类需要访问Kettle的变量或环境,可以使用`org.pentaho.di.core.KettleEnvironment`和`org.pentaho.di.core.row.RowMetaInterface`等API来实现。 2. **Execute Java Script步骤**: 虽然Execute Java ...
4. **反射机制**:深入理解类加载,运行时类信息获取,动态方法调用,以及如何利用反射实现元编程。 5. **Java注解**:阐述注解的作用,自定义注解的创建,以及如何在编译时和运行时处理注解。 6. **Java数据库...
12. **JVM内部**:了解JVM(Java虚拟机)的工作原理,包括内存管理、类加载机制、垃圾回收等,有助于优化代码和排查问题。 通过阅读《Core Java 7th》,读者不仅可以掌握Java 7的核心概念和技术,还能培养良好的...
Javacore是Java虚拟机(JVM)在遇到问题时生成的一种转储文件,包含了关于JVM运行时状态的重要信息,如线程堆栈跟踪、内存使用情况、类加载器状态等。对于诊断和解决性能问题、内存泄漏或挂起情况,Javacore分析至关...
Java Core文件是由JVM生成的一种日志文件,记录了JVM在特定时刻的状态,包括线程堆栈信息、内存使用情况、类加载信息等。当Java应用程序出现异常或者性能问题时,操作系统可能会触发JVM生成javacore文件,帮助...
"CoreJava代码"这个主题涵盖了Java编程语言的基础到高级概念,是Java开发人员必须掌握的核心知识。在这一压缩包中,我们很可能找到了一系列用于演示和练习这些概念的源代码文件。下面,我们将深入探讨Java的一些关键...
9. **JVM内存模型**:解释了Java虚拟机的工作原理,包括类加载、垃圾回收以及内存管理。 通过学习《Core Java 8h》,读者可以全面掌握Java编程的基本技能,并能进一步理解高级特性和实践,为成为一名专业的Java...
- 类加载:JVM在程序启动时加载必要的类文件。 - 字节码校验:确保字节码文件符合JVM规范,保障程序的安全性和稳定性。 - 解释执行:JVM将字节码转换为特定平台的机器指令,使得Java程序可以在多种平台上运行。 ###...
7. **反射**:Java的反射机制允许在运行时动态地获取类的信息并操作对象,源码将揭示其在动态代理、配置文件加载等方面的应用。 8. **泛型**:泛型增强了类型安全,源码将展示如何使用泛型方法和泛型类,以及通配符...
9. **反射API**:解释了如何在运行时动态获取类的信息,包括类加载、获取类的属性和方法,以及动态创建和调用对象。 10. **枚举和注解**:介绍了Java枚举类型以及注解(Annotation)的使用,如何创建自定义注解以及...