jvm
lifeline张
生活如此美丽
展开
-
十七、类加载器总结及扩展类加载器要点分析
1、类加载器双亲委托模型的好处 1、可以确保java核心库的类型安全:所有的java应用都至少会引用java.lang.Object类,也就是说在运行期,这个类会被加载到虚拟机中;如果这个加载过程是由自定义类加载器所完成的,那么很可能就会在jvm中存在多个版本的Object类,而且这些类之间还是不兼容的,相互不可见的(是因为命名空间)。借助于双亲委托机制,java核心类库中的加载动作都是由启动类加载器来统一完成加载工作,从而保证了java应用所使用的都是同一个版本的java核心类,他们之间是相互兼容的。原创 2020-05-11 23:14:14 · 295 阅读 · 0 评论 -
十六、类加载器实战剖析与疑难点解析
1、jvm自带各级加载器的加载路径 public class MyTest19 { public static void main(String[] args) throws Exception { System.out.println(System.getProperty("sun.boot.class.path")); System.out.println("======="); System.out.println(System.getPrope原创 2020-05-11 22:24:03 · 153 阅读 · 0 评论 -
十五、自定义类加载器在复杂类加载情况下的运行分析
准备动作: public class MyCat { public MyCat() { System.out.println("MyCat is loader by:" + this.getClass().getClassLoader()); } } public class MySample { public MySample() { System.out.println("MySample is loader by:" + this.getCl原创 2020-05-10 20:38:28 · 152 阅读 · 0 评论 -
十四、类的命名空间与卸载详解及jvisualvm使用
1、类的卸载 当一个类被加载、连接、初始化后,他的生命周期就开始了。当代表该类的Class对象不再被引用时,即不可触及时,Class对象就会结束生命周期,该类在方法区的数据也会被卸载,从而结束类的生命周期。 一个类何时结束生命周期,取决于代表他的Class对象何时结束生命周期。 由java虚拟机自带的类加载器所加载的类,在虚拟机的生命周期中,始终不会被卸载。java虚拟机自带的类加载器包括根类加载器、扩展类加载器和系统类加载器。java虚拟机本身会始终引用这些类加载器,而这些类加载器则会始终引用他们所加载的原创 2020-05-10 19:16:18 · 146 阅读 · 0 评论 -
十三、自定义类加载器
工具类: public class User { public static int age = 13; } 自定义类加载器: import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; public clas...原创 2020-05-10 12:14:49 · 140 阅读 · 0 评论 -
十二、ClassLoader文档分析
A class loader is an object that is responsible for loading classes. The class ClassLoader is an abstract class. Given the binary name of a class, a class loader should attempt to locate or generate d...原创 2020-05-08 00:28:09 · 140 阅读 · 0 评论 -
十一、不同的类加载器作用与加载动作分析
1、类加载器层级显示 以下代码可以展示加载器的层级 public class MyTest14 { public static void main(String[] args) { // 获得当前类的classloader ClassLoader classLoader = ClassLoader.getSystemClassLoader(); S...原创 2020-05-07 00:27:22 · 138 阅读 · 0 评论 -
十、初始化其他情况及总结
1、猜输出 class Parent2 { static int a = 3; static { System.out.println("Parent2 static block"); } } class Child2 extends Parent2 { static int b = 4; static { System...原创 2020-05-06 23:50:08 · 129 阅读 · 0 评论 -
九、类加载器双亲委托机制
1、双亲委托机制 在双亲委托机制中,各个加载器按照父子关系形成了树形结构(逻辑上的树形结构,并非继承关系),除了根类加载器之外,其余的类加载器都有且只有一个父加载器。 双亲委托机制的工作过程: 如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成,每一个层次的类加载器都是如此。因此所有的加载请求最终都应该传送到最顶层的根类加载器中。只有父类加载...原创 2020-05-05 15:20:15 · 108 阅读 · 0 评论 -
八、类加载器深入解析及重要特性剖析
1、类加载过程 其中连接又分为三个阶段:验证、准备、解析。 加载:就是把二进制形式的java类型读入到java虚拟机中 验证: 准备:为类的静态变量分配内存,设置默认值。但是在初始化之前,类变量都没有初始化为真正的初始值。 解析:解析过程就是在类型的常量池中寻找类、接口、字段和方法的符号引用,把这些符号引用替换成直接引用 初始化:为类变量赋予正确的初始值。 类实例化:为新的对象分配内存,为实例...原创 2020-05-04 16:35:20 · 185 阅读 · 0 评论 -
七、接口初始化规则与类加载器准备阶段和初始化阶段的重要意义分析
注:这节课的例子不能说明这节课的结论。 1、引例:判断接口有没有被初始化 public class MyTest5 { public static void main(String[] args) { System.out.println(MyChild5.b); } } interface MyParent5 { int a = 5; } interf...原创 2020-05-04 12:03:09 · 2124 阅读 · 0 评论 -
六、编译期常量与运行期常量的区别及数组创建本质分析
1、编译期常量与运行期常量 引例:判断MyParent3会不会初始化? import java.util.UUID; public class MyTest3 { public static void main(String[] args) { System.out.println(MyParent3.str); } } class MyParent3 { ...原创 2020-05-03 22:53:04 · 312 阅读 · 1 评论 -
五、常量的本质含义与反编译及助记符详解
1、关于加载的先后顺序 问题引入: public class MyTest1 { public static void main(String[] args) { System.out.println(MyChild1.str); } } class MyParent1 { public static String str = "hello world";...原创 2020-05-03 19:32:15 · 227 阅读 · 0 评论 -
四、类的加载、连接与初始化过程详解
java类加载分为以下几个过程: java程序对类的使用方式可分为两种: 主动使用 被动使用 所有的java虚拟机实现必须在每个类或接口被java程序“首次主动使用”时才初始化他们。(1、必须是首次 2、必须是主动使用) 1、主动使用 创建类的实例 访问某个类或接口的静态变量,或者对该静态变量赋值(对于静态字段来说,只有直接定义了该字段的类才会被初始化,见例1) 调用类的静态方法 反射 初...原创 2020-05-03 18:01:27 · 207 阅读 · 0 评论 -
三、类加载器深入解析与阶段分解
一、类加载 在java代码中,类型的加载、连接与初始化过程都是在程序运行期间完成的。 类型:指的是我们定义的一个class,一个interface,一个枚举等等,并不涉及到对象的概念。 类型的加载:比较典型的一种场景:将已经编写好的、编译完成的类的class文件从磁盘上面加载到内存里面。 连接:确定类与类之间的关系,并且对字节码进行一些处理(验证、校验等)。 ...原创 2020-05-03 16:21:56 · 107 阅读 · 0 评论 -
二、课程大纲分析及工具使用
一、课程大纲 jvm介绍 HotSpot虚拟机讲解:HotSpot是oracle公司推出的一个虚拟机,IBM也有自己实现的虚拟机。虚拟机有自己的实现规范,只有参照这个规范写一个虚拟机,能用即可。 垃圾收集方式详解:java是自动垃圾回收,我们需要了解是怎么实现的:什么时候进行垃圾回收、垃圾回收及常见实现方式及各自特点 垃圾收集算法详解 垃圾收集器详解 分代垃圾收集机制详解 新生代讲解...原创 2020-05-03 15:40:00 · 117 阅读 · 0 评论 -
一、在jvm学习之前
一、jvm学习 jvm学习不像一般的应用框架。一般的框架学完之后直接就可以测试应用,但是jvm偏理论,略显枯燥。 本课程基于jdk8,主要讲解一些核心知识,忽略各个不同版本之间的细微差别。主要介绍一些常用的参数。 ...原创 2020-05-03 14:56:00 · 386 阅读 · 0 评论