JVM-类加载、GC回收机制

类加载
1、通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件);
2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;
3、在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口;

类连接
1、验证:验证被加载后的类是否有正确的结构,类数据是否会符合虚拟机的要求
2、准备:为类的静态变量(static filed)在方法区分配内存,并赋默认初值(0值或null值)
3、解析:将类的二进制数据中的符号引用换为直接引用

类的初始化
为静态变量赋程序设定的初值

类加载器
双亲委派模型:主要体现在ClassLoader的loadClass()方法,思路:先检查是否已经被加载过,若没有加载则调用父类加载器的loadClass()方法,若父类加载器为空则默认使用启动类加载器作为父类加载器。如果父类加载器加载失败,抛出ClassNotFoundException异常后,调用自己的findClass()方法进行加载。

“相等”判定相关方法
1、判断两个实例对象的引用是否指向内存中同一个实例对象,使用 Class对象的equals()方法,obj1.equals(obj2);
2、判断实例对象是否为某个类、接口或其子类、子接口的实例对象,使用Class对象的isInstance()方法,class.isInstance(obj);
3、判断实例对象是否为某个类、接口的实例,使用instanceof关键字,obj instanceof class;
4、判断一个类是否为另一个类本身或其子类、子接口,可以使用Class对象的isAssignableFrom()方法,class1.isAssignableFrom(class2);

JVM的GC机制
Java GC机制主要完成3件事:确定哪些内存需要回收,确定什么时候需要执行GC,如何执行GC。
从4个方面学习Java GC机制:
1.内存是如何分配的;
2.如何保证内存不被错误回收(即哪些内存需要回收);
3.在什么情况下执行GC以及执行GC的方式;
4.如何监控和优化GC机制;

博客链接:https://blog.csdn.net/u012869196/article/details/77336370