没有合适的资源?快使用搜索试试~ 我知道了~
Java虚拟机JVM类加载初始化
需积分: 0 0 下载量 92 浏览量
2023-10-03
22:08:47
上传
评论
收藏 1.19MB DOCX 举报
温馨提示
试读
7页
1):本地编译好的class中直接加载 2):网络加载:java.net.URLClassLoader可以加载url指定的类 3):从jar、zip等等压缩文件加载类,自动解析jar文件找到class文件去加载util类 4):从java源代码文件动态编译成为class文件 当一个类被加载、连接、初始化后,它的生命周期就开始了,当代表该类的Class对象不再被引用、即已经不可触及的时候,Class对象的生命周期结束。那么该类的方法区内的数据也会被卸载,从而结束该类的生命周期。一个类的生命周期取决于它Class对象的生命周期。由Java虚拟机自带的默认加载器(根加载器、扩展加载器、系统加载器)所加载的类在JVM生命周期中始终不被卸载。所以这些类的Class对象(我称其为实例的模板对象)始终能被触及!而由用户自定义的类加载器所加载的类会被卸载掉!
资源推荐
资源详情
资源评论
Java 虚拟机 JVM 类加载初始化
1. Classloader 的作用
概括来说就是将编译后的 class 装载、加载到机器内存中,为了以后的程序的执行提供前提条件。
2.一段程序引发的思考:
package test01;
class Singleton {
public static Singleton singleton = new Singleton();
public static int a;
public static int b = 0;
private Singleton() {
super();
a++;
b++;
}
public static Singleton GetInstence() {
return singleton;
}
}
public class MyTest {
/**
* @param args
*/
public static void main(String[] args) {
Singleton mysingleton = Singleton.GetInstence();
System.out.println(mysingleton.a);
System.out.println(mysingleton.b);
}
}
一般不假思索的结论就是,a=1,b=1。给出的原因是:a、b 都是静态变量,在构造函数调用的时
候已经对 a 和 b 都加 1 了。答案就都是 1。但是运行完后答案却是 a=1,b=0。
下面我们将代码稍微变一下
public static Singleton singleton = new Singleton();
public static int a;
public static int b = 0;
的代码部分替换成
public static int a;
public static int b = 0;
public static Singleton singleton = new Singleton();
效果就是刚才预期的 a=1,b=1。
为什么呢,这 3 句无非就是静态变量的声明、初始化,值的变化和声明的顺序还有关系吗?Java
资源评论
shangjg3
- 粉丝: 1029
- 资源: 101
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功