类的加载

  • 类的调用,会导致类的加载 - xxx - xxx - 初始化
  • 类的初始化,必然先导致父类的,<mark>但是不会导致接口的初始化</mark>
    例子:
public class Demo_initial {
	public static void main(String[] args) {
		System.out.println(A.a);
	}
}

class A extends B implements implA{
	static {
		System.out.println("A static block");
	}
	public static int a = 10 ; 
}
class B {
	static{
		System.out.println("B static block");
	}
}
interface implA{
	Thread thread = new Thread() {
		 {
			System.out.println("implA static block in thread");
		}
	};
}

  • 接口的初始化也不会导致父接口的初始化
    例子:
public class Demo_initial {
	public static void main(String[] args) {
		System.out.println(implA.thread.toString());
	}
}

interface implA{
	Thread thread = new Thread() {
		{
			System.out.println("implA static block in thread");
		}
	};
}
interface implB extends implA{
	Thread thread = new Thread() {
		{
			System.out.println("implA static block in thread");
		}
	};
}

类加载器

逻辑上的继承:
根类加载器
附加类加载器
系统类加载器
应用类加载器(用户主动调用的加载器)

- 参数

-XX:+, 表示开启option选项
-XX:-, 表示关闭option选项
-XX:=, 表示将option选项的值设置为value

  • -XX:+TraceClassLoading 用于追踪类的加载信息并打印出来
  • -Xms 设置堆的最小空间大小
  • -Xmx 设置堆的最大空间大小

- 各种误区