1. 程式人生 > >讀鄭雨迪《深入拆解Java虛擬機器》 -- 第三講 Java虛擬機器是如何載入Java類的

讀鄭雨迪《深入拆解Java虛擬機器》 -- 第三講 Java虛擬機器是如何載入Java類的

我們把Java虛擬機器載入Java類比作蓋房子。那麼我們蓋房子,首先需要請建築師出個方案,然後去市政部門報備、驗證,通過後才可以開始蓋房子。蓋好房子還要裝修,之後才能住人。

從class檔案到記憶體中的類,按先後順序需要經過載入連結以及初始化三大步驟。其中,連結過程中同樣需要驗證;而記憶體中的類沒有經過初始化,同樣不能使用。那麼,是否所有的Java類都需要經過那麼幾步呢?

我們知道Java語言的型別可以分為兩大類:基本型別(primitive types)引用型別(reference types)。我們已經知道Java的基本型別是有Java虛擬機器預先定義好的。

至於另一大類引用型別,Java將其細化為四種:

  1. 介面
  2. 陣列類
  3. 泛型引數

由於泛型引數會在編譯過程中被擦除。因此Java虛擬機器實際上只有前三種。在類、介面和陣列類中,陣列類是由Java虛擬機器直接生成的,其他兩種則有對應的位元組流。

說到位元組流,最常見的形式要屬由Java編譯器生成的class檔案。除此之外,我們也可以在程式內部直接生成,或者從網路中獲取(例如網頁中內嵌的小程式Java applet)位元組流。這些不同形式的位元組流,都會被載入到Java虛擬機器中,成為類或介面。為了敘述方便,下文我們就用“類”來統稱它們。

無論是直接生成的陣列類,還是載入的類,Java虛擬機器都需要對其進行連結和初始化。

載入

載入,是指查詢位元組流,並且據此建立類的過程。

前面提到,對於陣列類來說,它並沒有對應的位元組流,而是由Java虛擬機器直接生成的。對於其他的類來說,Java虛擬機器則需要藉助類載入器來完成查詢位元組流的過程。

以蓋房子為例,村裡的Tony要蓋個房子,那麼按照流程他得先找個建築師,跟他說先要設計一個房型,比如說“一房、一廳、四衛”。這裡的房型相當於類,而建築師,就相當於類載入器。

村裡有很多建築師,他們等級森嚴,但有著共同的祖師爺,叫啟動類載入器(boot class loader)啟動類載入器是由C++實現的,沒有對應的Java物件,因此在Java中只能用null來指代。換句話說,祖師爺不喜歡像Tony這樣的小角色來打擾他,所以誰也沒有祖師爺的聯絡方式。

除了啟動類載入器之外,其他的類載入器都是java.lang.ClassLoader 的子類。因此有對應的Java物件。這些類載入器需要先由另一個類載入器,比如說啟動類載入器,載入至Java虛擬機器中,方能執行類載入。

村裡的建築師有一個潛規則,就是接到單子自己不能著手幹,得先給師傅過過目。師傅不接手的情況下,才能直接來。在Java虛擬機器中,這個潛規則有一個特別的名字,叫雙親委派模型

每當一個類載入器接收到載入請求時,它會先將請求轉發給父類載入器。在父類載入器沒有找到所請求的類的情況下,該類載入器才會嘗試去載入。

雙親委派模型工作工程:

  1. 當Application ClassLoader 收到一個類載入請求時,他首先不會自己去嘗試載入這個類,而是將這個請求委派給父類載入器Extension ClassLoader去完成。  
  2. .當Extension ClassLoader收到一個類載入請求時,他首先也不會自己去嘗試載入這個類,而是將請求委派給父類載入器Bootstrap ClassLoader去完成。  
  3. .如果Bootstrap ClassLoader載入失敗(在<JAVA_HOME>\lib中未找到所需類),就會讓Extension ClassLoader嘗試載入。  
  4. .如果Extension ClassLoader也載入失敗,就會使用Application ClassLoader載入。  
  5. .如果Application ClassLoader也載入失敗,就會使用自定義載入器去嘗試載入。  
  6. .如果均載入失敗,就會丟擲ClassNotFoundException異常。

在Java 9 之前, 啟動類載入器負責載入最為基礎、最為重要的類,比如存放在JRE的lib目錄下jar包中的類(以及由虛擬機器引數-Xbootclasspath指定的類)。

除了啟動類載入器之外,另外兩個重要的類載入器是

  • 擴充套件類載入器(extension class loader)

擴充套件類載入器的父類載入器是啟動類載入器。它負責載入相對次要、但又通用的類,比如存放在JRE的lib/ext目錄下jar包中的類(以及由系統變數java.ext.dirs指定的類)

  • 應用類載入器(application class loader)

應用類載入器的父類是擴充套件類載入器。它負責載入應用程式路徑下的類。(這裡的應用程式路徑,便是指虛擬機器引數 -cp/-classpath、系統變數java.class.path或環境變數CLASSPATH所指定的路徑下的jar包中的類。)預設情況下,應用程式中包含的類便是由應用類載入器載入的。

它們均由Java核心類庫提供。

Java9引入了模組系統,並且略微更改了上述的類載入器。擴充套件類載入器改名為平臺類載入器(platform class loader)。Java SE中除了少數幾個關鍵模組,比如說java.base是由啟動類載入器載入之外,其他的模組均由平臺類載入器載入。

除了由Java核心類庫提供的類載入器外,我們還可以加入自定義的類載入器,來實現特殊的載入方式。舉例來說,我們可以對class檔案進行加密,載入時再利用自定義的類載入器對其進行解密。

除了載入功能之外,類載入器還提供了名稱空間的作用。這個很好理解,打個比方,咱們村不講究版權,如果你剽竊了另一個建築師的設計作品,那麼只要標上自己的名字,這兩個房型就是不同的。

在Java虛擬機器中,類的唯一性是由類載入器例項以及類的全名一同確定的。即便是同一串位元組流,經由不同的類載入器載入,也會得到兩個不同的類、在大型應用中,我們往往藉助這一特性,來運行同一個類的不同版本。

連結

連結,是指將建立成的類合併至Java虛擬機器中,使之能夠執行的過程。它可以分為驗證、準備以及解析三個階段。

  • 驗證

驗證階段的目的,在於確保被載入類能夠滿足Java虛擬機器的約束條件。這就好比Tony需要將設計好的房型提交給市政部門稽核。只有當稽核通過,才能繼續下面的建造工作。

通常而言,Java編譯器生成的類檔案必然滿足Java虛擬機器的約束條件。

  • 準備

準備階段的目的,則是為被載入類的靜態欄位分配記憶體。Java程式碼中對靜態欄位的具體初始化,則會在稍後的初始化階段中進行。過了這個階段,咱們算是蓋好了毛坯房。雖然結構已經完整,但是在沒有裝修之前是不能住人的。

除了分配記憶體外,部分Java虛擬機器還會在此階段構造其他跟類層次相關的資料結構,比如說用來實現虛方法的動態繫結的方法表。

在class檔案被載入至Java虛擬機器之前,這個類無法知道其他類及其方法、欄位所對應的具體地址,甚至不知道自己方法、欄位的地址。因此,每當需要引用這些成員時,Java編譯器會生成一個符號引用。在執行階段,這個符號引用一般都能夠無歧義地定位到具體目標上。

舉例來說,對於一個方法呼叫,編譯器會生成一個包含目標方法所在類的名字、目標方法的名字、接受引數型別以及返回值型別的符號引用,來指代所需要呼叫的方法。

  • 解析

解析階段的目的,真是將這些符號引用解析成為實際引用。如果符號引用指向一個未被載入的類,或者未被載入類的欄位或方法,那麼解析將觸發這個類的載入(但未必觸發這個類的連結以及初始化。)

如果將這段話放在蓋房子的語境下,那麼符號引用就好比“Tony的房子”這種說法,不管它存在不存在,我們都可以用這種說法來指代Tony的房子。實際引用則好比實際的通訊地址,如果我們想要與Tony通訊,則需要啟動蓋房子的過程、

Java虛擬機器規範並沒有要求在連結過程中完成解析。它僅規定了:如果某些位元組碼使用了符號引用,那麼在執行這些位元組碼之前,需要完成對這些符號引用的解析。

初始化

在Java程式碼中,如果要初始化一個靜態欄位,我們可以在宣告時直接賦值,也可以在靜態程式碼塊中對其進行賦值。

如果直接賦值的靜態欄位被final所修飾,並且它的型別是基本型別或字串時,那麼該欄位便會被Java編譯器標記成常量值(Constant Value),其初始化直接由Java虛擬機器完成。除此之外的直接賦值操作,以及所有靜態程式碼塊中的程式碼,則會被Java編譯器置於同一方法中並把它命名為<clinit>

類載入的最後一步是初始化,便是標記為常量值的欄位賦值,以及執行<clinit>方法的過程。Java虛擬機器會通過加鎖來確保類的<clinit>方法僅被執行一次。

只有當初始化完成之後,類才正式成為可執行狀態。這放在我們蓋房子的例子中就是,只有當房子裝修過後,Tony才能真正地住進去。

JVM規範枚舉了如下多種類的初始化的觸發情況:

  1. 當虛擬機器啟動時,初始化使用者指定的主類
  2. 當遇到以新建目標類例項的new 指令時,初始化new 指令的目標類
  3. 當遇到呼叫靜態方法的指令時,初始化該靜態方法所在的類
  4. 當遇到訪問靜態欄位的指令時,初始化該靜態欄位所在的類
  5. 子類的初始化會觸發父類的初始化
  6. 如果一個介面定義了default方法,那麼直接實現或者間接實現該介面類的初始化,會觸發該介面的初始化
  7. 使用反射API對某個類進行反射呼叫時,初始化這個類
  8. 當初次呼叫MethodHandle例項時,初始化該MethodHandle指向的方法所在的類
public class Singleton{
    private Singleton(){}
    private static class LazyHolder{
        static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance(){
        return LazeHolder.INSTANCE;
    }
}

這段程式碼是著名的靜態內部類單例延遲初始化例子,只有當呼叫Singleton.getInstance時程式才會訪問LazyHolder.INSTANCE,才會觸發對LazeHolder的初始化(對應第4種情況),繼而新建一個Singleton的例項。由於類初始化是執行緒安全的,並且僅被執行一次,因此程式可以確保多執行緒環境下有且僅有一個Singleton例項。

通過JVM引數-verbose:class 來列印類載入的先後順序,並且在LazyHolder的初始化方法中列印特定字樣。

撰寫Singleton.java檔案

public class Singleton{
	private Singleton() {}
	private static class LazyHolder{
		static final Singleton INSTANCE = new Singleton();
		static {
			System.out.println("LazyHolder. <clinit>");
		}
	}

	public static Object getInstance(boolean flag){
		if(flag)
			return new LazyHolder[2];
		else
			return LazyHolder.INSTANCE;
	}

	public static void main(String[] args){
		getInstance(true);
		System.out.println("-------------");
		getInstance(false);
	}
}

編譯並執行它

javac Singleton.java 
java Singleton

-------------
LazyHolder. <clinit>
java -verbose:class Singleton
[Opened /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Object from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.Serializable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Comparable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.CharSequence from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.String from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.AnnotatedElement from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.GenericDeclaration from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Type from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Class from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Cloneable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.System from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Throwable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Error from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ThreadDeath from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Exception from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.RuntimeException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.SecurityManager from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.ProtectionDomain from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.AccessControlContext from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.SecureClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ReflectiveOperationException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassNotFoundException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.LinkageError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.NoClassDefFoundError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassCastException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ArrayStoreException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.VirtualMachineError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.OutOfMemoryError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StackOverflowError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.IllegalMonitorStateException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.Reference from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.SoftReference from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.WeakReference from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.FinalReference from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.PhantomReference from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Cleaner from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.Finalizer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.ReferenceQueue from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Runnable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Thread from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Thread$UncaughtExceptionHandler from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ThreadGroup from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Map from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Dictionary from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Hashtable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Properties from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.AccessibleObject from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Member from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Field from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Parameter from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Executable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Method from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Constructor from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.MagicAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.MethodAccessor from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.MethodAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ConstructorAccessor from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ConstructorAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.DelegatingClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ConstantPool from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.FieldAccessor from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.FieldAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.UnsafeFieldAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.UnsafeStaticFieldAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.annotation.Annotation from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.CallerSensitive from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandle from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.DirectMethodHandle from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MemberName from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandleNatives from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.LambdaForm from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodType from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.BootstrapMethodError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.CallSite from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.ConstantCallSite from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MutableCallSite from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.VolatileCallSite from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Appendable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.AbstractStringBuilder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StringBuffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StringBuilder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Unsafe from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.AutoCloseable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.Closeable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.InputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.ByteArrayInputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.File from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.net.URLClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.net.URL from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.jar.Manifest from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Launcher from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Launcher$AppClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Launcher$ExtClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.CodeSource from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StackTraceElement from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.Buffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Boolean from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Character from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Number from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Float from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Double from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Byte from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Short from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Integer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Long from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.NullPointerException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ArithmeticException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.ObjectStreamField from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Comparator from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.String$CaseInsensitiveComparator from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.Guard from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.Permission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.BasicPermission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.RuntimePermission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.AccessController from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.ReflectPermission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.PrivilegedAction from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ReflectionFactory$GetReflectionFactoryAction from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.cert.Certificate from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Iterable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.List from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.RandomAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.AbstractCollection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.AbstractList from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Vector from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Stack from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ReflectionFactory from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.Reference$Lock from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.Reference$ReferenceHandler from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.InterruptedException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.ArrayList from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Set from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.AbstractSet from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections$EmptySet from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections$EmptyList from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.AbstractMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections$EmptyMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections$UnmodifiableCollection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections$UnmodifiableList from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections$UnmodifiableRandomAccessList from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.ReferenceQueue$Null from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.ReferenceQueue$Lock from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.JavaLangRefAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.Reference$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.SharedSecrets from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.IncompatibleClassChangeError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.NoSuchMethodError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.Reflection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.HashMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Map$Entry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.HashMap$Node from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.VM from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Hashtable$Entry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Math from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.Finalizer$FinalizerThread from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.charset.Charset from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.charset.spi.CharsetProvider from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.FastCharsetProvider from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.StandardCharsets from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.util.PreHashedMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.StandardCharsets$Aliases from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.StandardCharsets$Classes from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.StandardCharsets$Cache from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ThreadLocal from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.atomic.AtomicInteger from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Class$3 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Class$ReflectionData from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Class$Atomic from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.generics.repository.AbstractRepository from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.generics.repository.GenericDeclRepository from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.generics.repository.ClassRepository from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Class$AnnotationData from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.annotation.AnnotationType from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.WeakHashMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassValue$ClassValueMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Modifier from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.LangReflectAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.ReflectAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Arrays from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.HistoricallyNamedCharset from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.Unicode from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.UTF_8 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Class$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ReflectionFactory$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.NativeConstructorAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.DelegatingConstructorAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StringCoding from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ThreadLocal$ThreadLocalMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ThreadLocal$ThreadLocalMap$Entry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StringCoding$StringDecoder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.ArrayDecoder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.charset.CharsetDecoder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.UTF_8$Decoder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.charset.CodingErrorAction from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Hashtable$EntrySet from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections$SynchronizedCollection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections$SynchronizedSet from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Objects from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Enumeration from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Iterator from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Hashtable$Enumerator from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Runtime from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Version from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FileInputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FileDescriptor from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.JavaIOFileDescriptorAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FileDescriptor$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.Flushable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.OutputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FileOutputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FilterInputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.BufferedInputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.atomic.AtomicReferenceFieldUpdater from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.PrivilegedExceptionAction from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.misc.ReflectUtil from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FilterOutputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.PrintStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.BufferedOutputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.Writer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.OutputStreamWriter from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.StreamEncoder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.security.action.GetPropertyAction from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.ArrayEncoder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.charset.CharsetEncoder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.UTF_8$Encoder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.ByteBuffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.HeapByteBuffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.Bits from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.ByteOrder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.atomic.AtomicLong from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.JavaNioAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.Bits$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.BufferedWriter from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.DefaultFileSystem from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FileSystem from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.UnixFileSystem from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.ExpiringCache from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.LinkedHashMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.ExpiringCache$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Enum from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.File$PathStatus from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.file.Watchable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.file.Path from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StringCoding$StringEncoder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassLoader$3 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.ExpiringCache$Entry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.LinkedHashMap$Entry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassLoader$NativeLibrary from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Terminator from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.SignalHandler from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Terminator$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Signal from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.NativeSignalHandler from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Integer$IntegerCache from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.OSEnvironment from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.JavaLangAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.System$2 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.IllegalArgumentException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Compiler from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Compiler$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.net.URLStreamHandlerFactory from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Launcher$Factory from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.security.util.Debug from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassLoader$ParallelLoaders from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.WeakHashMap$Entry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections$SetFromMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.WeakHashMap$KeySet from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.JavaNetAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.net.URLClassLoader$7 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Launcher$ExtClassLoader$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.StringTokenizer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.MetaIndex from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.net.www.ParseUtil from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.BitSet from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Locale from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.util.locale.LocaleObjectCache from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Locale$Cache from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.ConcurrentMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.ConcurrentHashMap from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.locks.Lock from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.locks.ReentrantLock from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.ConcurrentHashMap$Segment from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.ConcurrentHashMap$Node from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.ConcurrentHashMap$CounterCell from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.ConcurrentHashMap$CollectionView from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.ConcurrentHashMap$KeySetView from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.ConcurrentHashMap$ValuesView from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.concurrent.ConcurrentHashMap$EntrySetView from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.util.locale.BaseLocale from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.util.locale.BaseLocale$Cache from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.util.locale.BaseLocale$Key from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.util.locale.LocaleObjectCache$CacheEntry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Locale$LocaleKey from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.util.locale.LocaleUtils from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.CharacterData from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.CharacterDataLatin1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.net.Parts from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.net.URLStreamHandler from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.net.www.protocol.file.Handler from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.HashMap$TreeNode from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.JavaSecurityAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.ProtectionDomain$JavaSecurityAccessImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.JavaSecurityProtectionDomainAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.ProtectionDomain$2 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.ProtectionDomain$Key from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.Principal from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.HashSet from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.URLClassPath from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.net.www.protocol.jar.Handler from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Launcher$AppClassLoader$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.SystemClassLoaderAction from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandleImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandleImpl$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.function.Function from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandleImpl$2 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandleImpl$3 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassValue from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandleImpl$4 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassValue$Entry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassValue$Identity from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassValue$Version from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MemberName$Factory from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandleStatics from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandleStatics$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.launcher.LauncherHelper from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.net.URLClassLoader$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.net.util.URLUtil from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.URLClassPath$3 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.URLClassPath$Loader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.URLClassPath$JarLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.zip.ZipConstants from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.zip.ZipFile from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.JavaUtilZipFileAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.zip.ZipFile$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.URLClassPath$JarLoader$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.FileURLMapper from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.jar.JarFile from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.JavaUtilJarAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.jar.JavaUtilJarAccessImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.charset.StandardCharsets from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.US_ASCII from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.ISO_8859_1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.UTF_16BE from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.UTF_16LE from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.cs.UTF_16 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Queue from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Deque from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.ArrayDeque from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.zip.ZipCoder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.PerfCounter from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Perf$GetPerfAction from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Perf from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.PerfCounter$CoreCounters from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.ch.DirectBuffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.MappedByteBuffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.DirectByteBuffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.LongBuffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.DirectLongBufferU from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.JarIndex from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.ExtensionDependency from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.zip.ZipEntry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.jar.JarEntry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.jar.JarFile$JarFileEntry from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.zip.ZipFile$ZipFileInputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.zip.Inflater from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.zip.ZStreamRef from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.zip.InflaterInputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.zip.ZipFile$ZipFileInflaterInputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.IOUtils from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.URLClassPath$FileLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Resource from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.URLClassPath$FileLoader$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.nio.ByteBuffered from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FileInputStream$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.PermissionCollection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.Permissions from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.net.URLConnection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.net.www.URLConnection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.net.www.protocol.file.FileURLConnection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.net.www.MessageHeader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FilePermission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FilePermission$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.FilePermissionCollection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.AllPermission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.UnresolvedPermission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.BasicPermissionCollection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded Singleton from file:/home/ubuntu/Documents/java/]   %看這裡
[Loaded sun.launcher.LauncherHelper$FXHelper from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Class$MethodArray from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Void from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded Singleton$LazyHolder from file:/home/ubuntu/Documents/java/]  %看這裡,這裡已經完成載入
[Loaded java.lang.Readable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.CharBuffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.HeapCharBuffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.charset.CoderResult from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.charset.CoderResult$Cache from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.charset.CoderResult$1 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.charset.CoderResult$2 from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
-------------
LazyHolder. <clinit>
[Loaded java.lang.Shutdown from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Shutdown$Lock from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]

從中我們可以看到,新建陣列只會載入內部類LazyHolder,而不會初始化內部類LazyHolder。而當訪問到內部類LazyHolder的靜態欄位INSTANCE的時候,LazyHolder會被載入。

java -cp ./asmtools.jar org.openjdk.asmtools.jdis.Main Singleton\$LazyHolder.class > Singleton\$LazyHolder.jasm.1

得到JVM彙編檔案Singleton$LazyHolder.jasm.1

super class Singleton$LazyHolder
	version 52:0
{

static final Field INSTANCE:"LSingleton;";

private Method "<init>":"()V"
	stack 1 locals 1 //看這裡
{
		aload_0;
		invokespecial	Method java/lang/Object."<init>":"()V";
		return;
}

static Method "<clinit>":"()V"
	stack 3 locals 0
{
		new	class Singleton;
		dup;
		aconst_null;
		invokespecial	Method Singleton."<init>":"(LSingleton$1;)V";
		putstatic	Field INSTANCE:"LSingleton;";
		getstatic	Field java/lang/System.out:"Ljava/io/PrintStream;";
		ldc	String "LazyHolder. <clinit>";
		invokevirtual	Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
		return;
}

private static InnerClass LazyHolder=class Singleton$LazyHolder of class Singleton;
static synthetic InnerClass class Singleton$1;

} // end Class Singleton$LazyHolder

執行指令(其作用為將Singleton$LazyHolder.jasm.1檔案中的第一個“stack 1”替換為 “stack 0” 生成為Singleton$LazyHolder.jasm中)

awk 'NR==1,/stack 1/{sub(/stack 1/, "stack 0")} 1' Singleton\$LazyHolder.jasm.1 > Singleton\$LazyHolder.jasm

得到新的JVM彙編檔案Singleton$LazyHolder.jasm


super class Singleton$LazyHolder
	version 52:0
{

static final Field INSTANCE:"LSingleton;";

private Method "<init>":"()V"
	stack 0 locals 1  //看這裡
{
		aload_0;
		invokespecial	Method java/lang/Object."<init>":"()V";
		return;
}

static Method "<clinit>":"()V"
	stack 3 locals 0
{
		new	class Singleton;
		dup;
		aconst_null;
		invokespecial	Method Singleton."<init>":"(LSingleton$1;)V";
		putstatic	Field INSTANCE:"LSingleton;";
		getstatic	Field java/lang/System.out:"Ljava/io/PrintStream;";
		ldc	String "LazyHolder. <clinit>";
		invokevirtual	Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
		return;
}

private static InnerClass LazyHolder=class Singleton$LazyHolder of class Singleton;
static synthetic InnerClass class Singleton$1;

} // end Class Singleton$LazyHolder

將修改後的程式碼彙編成新的Singleton$LazyHolder.class位元組碼檔案

java -cp ./asmtools.jar org.openjdk.asmtools.jasm.Main Singleton\$LazyHolder.jasm

我們藉助JVM引數-verbose:class 瞭解類載入順序

java -verbose:class Singleton
[Opened /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Object from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.Serializable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Comparable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.CharSequence from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.String from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.AnnotatedElement from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.GenericDeclaration from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Type from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Class from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Cloneable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.System from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Throwable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Error from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ThreadDeath from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Exception from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.RuntimeException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.SecurityManager from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.ProtectionDomain from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.AccessControlContext from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.SecureClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ReflectiveOperationException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassNotFoundException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.LinkageError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.NoClassDefFoundError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ClassCastException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ArrayStoreException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.VirtualMachineError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.OutOfMemoryError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StackOverflowError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.IllegalMonitorStateException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.Reference from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.SoftReference from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.WeakReference from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.FinalReference from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.PhantomReference from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Cleaner from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.Finalizer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.ReferenceQueue from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Runnable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Thread from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Thread$UncaughtExceptionHandler from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ThreadGroup from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Map from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Dictionary from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Hashtable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Properties from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.AccessibleObject from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Member from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Field from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Parameter from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Executable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Method from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.Constructor from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.MagicAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.MethodAccessor from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.MethodAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ConstructorAccessor from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ConstructorAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.DelegatingClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ConstantPool from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.FieldAccessor from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.FieldAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.UnsafeFieldAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.UnsafeStaticFieldAccessorImpl from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.annotation.Annotation from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.CallerSensitive from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandle from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.DirectMethodHandle from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MemberName from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodHandleNatives from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.LambdaForm from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MethodType from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.BootstrapMethodError from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.CallSite from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.ConstantCallSite from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.MutableCallSite from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.invoke.VolatileCallSite from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Appendable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.AbstractStringBuilder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StringBuffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StringBuilder from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Unsafe from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.AutoCloseable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.Closeable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.InputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.ByteArrayInputStream from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.File from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.net.URLClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.net.URL from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.jar.Manifest from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Launcher from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Launcher$AppClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.misc.Launcher$ExtClassLoader from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.CodeSource from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.StackTraceElement from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.nio.Buffer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Boolean from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Character from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Number from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Float from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Double from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Byte from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Short from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Integer from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Long from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.NullPointerException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ArithmeticException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.io.ObjectStreamField from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Comparator from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.String$CaseInsensitiveComparator from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.Guard from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.Permission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.BasicPermission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.RuntimePermission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.AccessController from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.reflect.ReflectPermission from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.PrivilegedAction from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ReflectionFactory$GetReflectionFactoryAction from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.security.cert.Certificate from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.Iterable from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.List from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.RandomAccess from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.AbstractCollection from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.AbstractList from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Vector from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Stack from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded sun.reflect.ReflectionFactory from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.Reference$Lock from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.ref.Reference$ReferenceHandler from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.lang.InterruptedException from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.ArrayList from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Collections from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.Set from /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
[Loaded java.util.AbstractSet from /usr/lib