Java虚拟机与程序的生命周期
在如下几种情况下,Java虚拟机将结束生命周期
–执行了System.exit()方法.
exit():终止当前正在运行的 Java 虚拟机。
参数用作状态码;根据惯例,非0 的状态码表示异常终止
–程序正常执行结束(main:方法执行完)
–程序在执行过程中遇到了异常或错误而异常终止
–由于操作系统出现错误而导致Java虚拟机进程终止
类加载、连接、初始化
•加载:查找并加载类的二进制数据(硬盘中的class文件到内存中)
•连接
–
验证:确保被加载的类的正确性(有可能人为建一个class文件,javac生成的class文件肯定正确)
–
准备:为类的
静态变量分配内存,并将其初始化为默认值(下述代码为例: 把静态的a赋值0)
–
解析:
把类中的符号引用转换为直接引用(把代码中的引用关系变为指针引用)
•初始化:为类的静态变量赋予正确的初始值(下述代码为例: 把静态的a赋值5)
加载->连接(验证、准备、解析)->初始化
1、类的加载
public class Test {
private static int a = 3;
static {
a = 4;
}
static {
a = 5;
}
}
public class Test {
private static int a = 5;
}
以上这两段代码等效!!
•Java程序对类的使用方式可分为两种
–主动使用
–被动使用
•所有的Java虚拟机实现必须在每个类或接口被Java程序“首次主动使用”时才初始化他们
•主动使用(六种)
–创建类的实例(new Test())
–访问某个类或接口的静态变量,或者对该静态变量赋值(int b = Test.a; Test.a = b;)
–调用类的静态方法
–反射(如Class.forName(“cc.icafebar.Test”))
–初始化一个类的子类(对父类的主动使用)
–Java虚拟机启动时被标明为启动类的类(Test.java 编译后生成 Test.class Parent.class Childer.class 执行Test.java (命令行下:java Test))
除了以上六种情况,其他使用Java类的方式都被看作是对类的被动使用,都不会导致类的初始化
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构
•加载.class文件的方式
–从本地系统中直接加载
–通过网络下载.class文件
–从zip,jar等归档文件中加载.class文件
–从专有数据库中提取.class文件
–将Java源文件动态编译为.class文件
加载后的结果:
•
类的加载的最终产品是位于堆区中的Class对象。Class对象只能由JVM创建,构造方法private的。类加载的时候JVM创建该类的Class对象
•Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口(可以利用反射了)。如图:
加载器类型:
•有两种类型的类加载器
–
Java虚拟机自带的加载器
•根类加载器(Bootstrap)(使用C++编写,程序员无法在Java代码中获得该类)
•扩展类加载器(Extension),使用Java代码实现
•系统类加载器(System)(有叫应用加载器),使用Java代码实现
–
用户自定义的类加载器
•java.lang.ClassLoader的子类
•用户可以定制类的加载方式
- 大小: 52 KB
分享到:
相关推荐
《深入Java虚拟机_ClassLoader》是一本专注于Java虚拟机(JVM)中ClassLoader部分的专著,旨在帮助读者深入理解Java程序如何加载、链接和初始化类。ClassLoader是Java平台核心特性的一部分,它负责查找和加载类到JVM...
在Java Web应用中,类加载器(Class Loader)扮演着至关重要的角色,它负责加载运行时所需的类。在这个"web_classloader_test.zip_web classloader"示例中,我们可能涉及到了一些关于Web应用中类加载机制的核心概念...
### Java ClassLoader 详解 #### 一、ClassLoader 概述 在 Java 语言中,类加载器(ClassLoader)是 Java 运行时环境的核心组成部分之一,它负责将编译后的 `.class` 文件加载到 JVM 中执行。从 JDK 1.0 开始,...
使用jvmti对加密的类进行解密,此文件为解密的dll源码
本示例项目"my_classloader_demo-master.7z"聚焦于通过Native层实现热修复,这涉及到Android系统的核心组件以及对Java虚拟机(JVM)的深入理解。 1. **类加载器(ClassLoader)**: 在Java编程中,类加载器是负责将类...
而JVM代理(JVM Agent)和类加载器(ClassLoader)则是两个关键的概念,它们对于深入理解Java应用程序的运行机制至关重要。 **JVM代理** JVM代理是一种在JVM启动时或者运行时插入额外功能的方式,它允许开发者在不...
工程名为service_classloader,功能全部使用corejava实现,使用maven管理依赖,没有使用任何框架(junit除外)。 使用的技术主要包括:classlaoder,加密解密,线程,ThreadLocal使用,反射,IO操作,jdbc, 序列化,...
破解java加密的ClassLoader.java,在classloader植入破解代码
7. **资源管理**: 压缩包内的资源文件,如图片,会被Java的`ClassLoader`或`FileInputStream`加载。理解如何正确管理和加载外部资源是Java应用程序开发的重要部分。 8. **设计模式**: 良好的代码结构可能采用了设计...
对于标题“Java SE: ClassLoader in depth”和描述中提到的“源码”、“工具”,实际上在给出的内容部分并没有任何与Java ClassLoader深入相关的技术信息。所提供的内容实际上是一份公司入职报到的指南,与Java编程...
Scala_Java_Override_Variable_Parameter Scala_Map_List_Array Security_Camera_Invade SpringBoot-RabbitMQ SpringBoot-Scala SpringBoot-Swagger SpringBoot SpringBoot_ApplicationContext SpringBoot_DevTools ...
在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作原理以及如何定制它,对于深入学习Java的运行机制和进行高级应用开发具有重要意义。本篇文章将...
Java ClassLoader是一个核心的Java运行时组件,负责加载类到Java虚拟机(JVM)中。它是Java平台的独特特性,因为它允许动态加载类,增强了软件的可扩展性和灵活性。这篇博文(虽然链接不可用)可能深入探讨了...
Java类加载器(ClassLoader)是Java虚拟机(JVM)的核心组成部分,负责将类的字节码转换为可运行的Java对象。Java类加载器分为三种主要类型:引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ...
### Java ClassLoader与ClassPath详解 #### 一、概述 在Java编程中,类加载机制是十分关键的一个环节。类加载器(`ClassLoader`)负责将编译后的`.class`文件加载到Java虚拟机(JVM)中执行,而类路径(`ClassPath...
Java ClassLoader机制是Java运行时环境中的核心组件之一,它负责加载类到JVM(Java虚拟机)中,使得程序能够执行。理解ClassLoader的工作原理对于优化应用性能、处理类加载问题以及实现自定义加载器至关重要。 首先...
Java SE 7(Java Standard Edition 7)是Java平台的一个重要版本,引入了许多新特性和改进,使得开发者能够编写更加高效和可靠的程序。本篇文章将详细探讨Java虚拟机规范在Java SE 7中的主要内容。 1. 类加载机制:...