字節碼編程,也就是動態修改或是動態生成 Java 字節碼。Java 的字節碼至關於彙編,其中的一些細節。html
不使用 JVMTI 操做字節碼,而是用一些更好用的庫。這裏有三個庫能夠比較容易地作這個事。java
Byte Buddy,在 2015 年還獲了 Oracle 的 「Duke’s Choice」大獎,其中說 Byte Buddy 極大地發展了 Java 的技術。git
使用字節碼編程能夠玩出不少高級玩法,最高級的仍是在 Java 程序運行時進行字節碼修改和代碼注入。這個方式使用 Java 這門靜態語言在運行時能夠進行各類動態的代碼修改,並且能夠進行無侵入的編程。github
Java Agent 的技術。Java Agent 使用的是 「Java Instrumentation API」,其主要方法是實現一個叫 premain()
的方法(嗯,一個比 main()
函數還要超前執行的 main 函數),而後把你的代碼編譯成一個 jar 文件。在 JVM 啓動時,使用這樣的命令行來引入你的 jar 文件:java -javaagent:yourAwesomeAgent.jar -jar App.jar
。算法
更爲詳細的文章能夠參看:「Java Code Geeks: Java Agents」編程
示例項目:jvm-monitoring-agent 或是 EntryPointKR/Agent.java。多線程
若是想用 ByteBuddy 來玩,你能夠看看這篇文章 「經過使用 Byte Buddy,便捷地建立 Java Agent」。oracle
學習如何用 Java Agent 作監控,項目 Stage Monitor。jvm
Java 底層知識中另外一個很是重要的內容——JVM。jsp
JVM 的規格說明書,Java 8 的, The Java Virtual Machine Specification Java SE 8 Edition 。
中文翻譯,GitHub Repo - 「java-virtual-machine-specification」。
JVM Anatomy Park JVM 解剖公園,帶你一點一點地把 JVM 中的一些技術解開。
學習 Java 底層原理還有 Java 的內存模型,官方文章是 JSR 133。還有馬里蘭大學的威廉·皮尤(William Pugh)教授收集的和 Java 內存模型相關的文獻 - The Java Memory Model 。
內存方面兩篇文章。
垃圾回收機制 《The Garbage Collection Handbook》,這本書很是全面地介紹了垃圾收集的原理、設計和算法。可是這本書也是至關難啃的。中文翻譯《垃圾回收算法手冊》
調優垃圾回收, Garbage Collection Tuning Guide ,它是 Hotspot Java 虛擬機的垃圾回收調優指南。
Quick Tips for Fast Code on the JVM 裏面有寫出更快的 Java 代碼的幾個小提示。
Java 最黑科技的玩法就是字節碼編程,也就是動態修改或是動態生成 Java 字節碼。Java 的字節碼至關於彙編。
通常不使用 JVMTI 操做字節碼,而是用一些更好用的庫,如 asmtools、Byte Buddy 和 BiteScript 等。使用字節碼編程能夠玩出不少高級玩法,其中最高級的玩法是在 Java 程序運行時進行字節碼修改和代碼注入。
Java Agent 技術更好地實現這種高級玩法。
JVM 也是學習 Java 過程當中很是重要的一部份內容。閱讀JVM 的規格說明書是系統瞭解 JVM 規範的最佳文檔, JVM Anatomy Park 系列文章,也很是值得一讀。
Java 的內存模型和垃圾回收機制,出了如何調優垃圾回收方面的資料。