国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

程序員練級攻略(2018):Java底層知識

wean / 2781人閱讀

摘要:最黑科技的玩法就是字節(jié)碼編程,也就是動態(tài)修改或是動態(tài)生成字節(jié)碼。使用字節(jié)碼編程可以玩出很多高級玩法,其中最高級的玩法是在程序運(yùn)行時(shí)進(jìn)行字節(jié)碼修改和代碼注入。


這個(gè)是我訂閱 陳皓老師在極客上的專欄《左耳聽風(fēng)》,我貼出來是為了自己以后方便學(xué)習(xí)和記憶,同時(shí)也分享給你們一起學(xué)習(xí),當(dāng)然如果有興趣,可以去訂閱,為了避免廣告嫌疑,我這就不多說了!以下第一人稱是指陳皓老師。

想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你!

Java 字節(jié)碼相關(guān)

首先,Java 最黑科技的玩法就是字節(jié)碼編程,也就是動態(tài)修改或是動態(tài)生成 Java 字節(jié)碼。Java 的字節(jié)碼相當(dāng)于匯編,其中的一些細(xì)節(jié)你可以從下面的這幾個(gè)教程中學(xué)習(xí)。

Java Zone: Introduction to Java Bytecode ,這篇文章圖文并茂地向你講述了 Java 字節(jié)碼的一些細(xì)節(jié),是一篇很不錯(cuò)的入門文章。

IBM DeveloperWorks: Java bytecode ,雖然這篇文章很老了,但是這篇文章是一篇非常好的講 Java 字節(jié)碼的文章。

Java Bytecode and JVMTI Examples,這是一些使用 JVM Tool Interface 操作字節(jié)碼的比較實(shí)用的例子。包括方法調(diào)用統(tǒng)計(jì)、靜態(tài)字節(jié)碼修改、Heap Taggin 和 Heap Walking。

當(dāng)然,一般來說,我們不使用 JVMTI 操作字節(jié)碼,而是用一些更好用的庫。這里有三個(gè)庫可以幫你比較容易地做這個(gè)事。

asmtools - 用于生產(chǎn)環(huán)境的 Java .class 文件開發(fā)工具。

Byte Buddy - 代碼生成庫:運(yùn)行時(shí)創(chuàng)建 Class 文件而不需要編譯器幫助。

Jitescript - 和 BiteScript 類似的字節(jié)碼生成庫。

就我而言,我更喜歡 Byte Buddy,它在 2015 年還獲了 Oracle 的 “Duke’s Choice” 大獎,其中說 Byte Buddy 極大地發(fā)展了 Java 的技術(shù)。

使用字節(jié)碼編程可以玩出很多高級玩法,最高級的還是在 Java 程序運(yùn)行時(shí)進(jìn)行字節(jié)碼修改和代碼注入。聽起來是不是一些很黑客,也很黑科技的事?是的,這個(gè)方式使用 Java 這門靜態(tài)語言在運(yùn)行時(shí)可以進(jìn)行各種動態(tài)的代碼修改,而且可以進(jìn)行無侵入的編程。

比如, 我們不需要在代碼中埋點(diǎn)做統(tǒng)計(jì)或監(jiān)控,可以使用這種技術(shù)把我們的監(jiān)控代碼直接以字節(jié)碼的方式注入到別人的代碼中,從而實(shí)現(xiàn)對實(shí)際程序運(yùn)行情況進(jìn)行統(tǒng)計(jì)和監(jiān)控。如果你看過我的《編程范式游記》,你就知道這種技術(shù)的威力了,其可以很魔法地把業(yè)務(wù)邏輯和代碼控制分離開來。

要做到這個(gè)事,你還需要學(xué)習(xí)一個(gè)叫 Java Agent 的技術(shù)。Java Agent 使用的是 “Java Instrumentation API”,其主要方法是實(shí)現(xiàn)一個(gè)叫 premain() 的方法(嗯,一個(gè)比 main() 函數(shù)還要超前執(zhí)行的 main 函數(shù)),然后把你的代碼編譯成一個(gè) jar 文件。

在 JVM 啟動時(shí),使用這樣的命令行來引入你的 jar 文件:

java -javaagent:yourAwesomeAgent.jar -jar App.jar。更為詳細(xì)的文章你可以參看:“Java Code Geeks: Java Agents”,你還可以看一下這個(gè)示例項(xiàng)目:jvm-monitoring-agent 或是 EntryPointKR/Agent.java。如果想用 ByteBuddy 來玩,你可以看看這篇文章 “通過使用 Byte Buddy,便捷地創(chuàng)建 Java Agent”。如果你想學(xué)習(xí)如何用 Java Agent 做監(jiān)控,你可以看一下這個(gè)項(xiàng)目 Stage Monitor。

JVM 相關(guān)

接下來講講 Java 底層知識中另一個(gè)非常重要的內(nèi)容——JVM。

說起 JVM,你有必要讀一下 JVM 的規(guī)格說明書,我在這里放一個(gè) Java 8 的, The Java Virtual Machine Specification Java SE 8 Edition 。對于規(guī)格說明書的閱讀,我認(rèn)為是系統(tǒng)了解 JVM 規(guī)范的最佳文檔,這個(gè)文檔可以讓你對于搞不清楚或是詭異的問題恍然大悟。關(guān)于中文翻譯,有人在 GitHub 上開了個(gè) Repo - “java-virtual-machine-specification”。

另外,也推薦一下 JVM Anatomy Park JVM 解剖公園,這是一個(gè)系列的文章,每篇文章都不長,但是都很精彩,帶你一點(diǎn)一點(diǎn)地把 JVM 中的一些技術(shù)解開。

學(xué)習(xí) Java 底層原理還有 Java 的內(nèi)存模型,官方文章是 JSR 133。還有馬里蘭大學(xué)的威廉·皮尤(William Pugh)教授收集的和 Java 內(nèi)存模型相關(guān)的文獻(xiàn) - The Java Memory Model ,你可以前往瀏覽。

對于內(nèi)存方面,道格·利(Doug Lea)有兩篇文章也是很有價(jià)值的。

The JSR-133 Cookbook for Compiler Writers,解釋了怎樣實(shí)現(xiàn) Java 內(nèi)存模型,特別是在考慮到多處理器(或多核)系統(tǒng)的情況下,多線程和讀寫屏障的實(shí)現(xiàn)。

Using JDK 9 Memory Order Modes,講了怎樣通過 VarHandle 來使用 plain、opaque、release/acquire 和 volatile 四種共享內(nèi)存的訪問模式,并剖析了底層的原理。

垃圾回收機(jī)制也是需要好好學(xué)習(xí)的,在這里推薦一本書 《The Garbage Collection Handbook》,在豆瓣上的得分居然是 9.9(當(dāng)然,評價(jià)人數(shù)不多)。這本書非常全面地介紹了垃圾收集的原理、設(shè)計(jì)和算法。但是這本書也是相當(dāng)難啃的。中文翻譯《垃圾回收算法手冊》翻譯得很一般,有人說翻譯得很爛。所以,如果可能,還是讀英文版的。如果你對從事垃圾回收相關(guān)的工作有興趣,那么你需要好好看一下這本書。

當(dāng)然,更多的人可能只需要知道怎么調(diào)優(yōu)垃圾回收, 那么推薦讀讀 Garbage Collection Tuning Guide ,它是 Hotspot Java 虛擬機(jī)的垃圾回收調(diào)優(yōu)指南,對你很有幫助。

Quick Tips for Fast Code on the JVM 也是一篇很不錯(cuò)的文章,里面有寫出更快的 Java 代碼的幾個(gè)小提示,值得一讀。

小結(jié)

好了,總結(jié)一下今天學(xué)到的內(nèi)容。Java 最黑科技的玩法就是字節(jié)碼編程,也就是動態(tài)修改或是動態(tài)生成 Java 字節(jié)碼。Java 的字節(jié)碼相當(dāng)于匯編,學(xué)習(xí)其中的細(xì)節(jié)很有意思,為此我精心挑選了 3 篇文章,供你學(xué)習(xí)。我們一般不使用 JVMTI 操作字節(jié)碼,而是用一些更好用的庫,如 asmtools、Byte Buddy 和 BiteScript 等。使用字節(jié)碼編程可以玩出很多高級玩法,其中最高級的玩法是在 Java 程序運(yùn)行時(shí)進(jìn)行字節(jié)碼修改和代碼注入。同時(shí),我介紹了 Java Agent 技術(shù),幫助你更好地實(shí)現(xiàn)這種高級玩法。

JVM 也是學(xué)習(xí) Java 過程中非常重要的一部分內(nèi)容。我推薦閱讀一下 JVM 的規(guī)格說明書,我認(rèn)為,它是系統(tǒng)了解 JVM 規(guī)范的最佳文檔,可以讓你對于搞不清楚或是詭異的問題恍然大悟。同時(shí)推薦了 JVM Anatomy Park 系列文章,也非常值得一讀。

隨后介紹的是 Java 的內(nèi)存模型和垃圾回收機(jī)制,尤其給出了如何調(diào)優(yōu)垃圾回收方面的資料。這些內(nèi)容都很底層,但也都很重要。對于想成為高手的你來說,還是有必要花時(shí)間來啃一啃的。

你的點(diǎn)贊是我持續(xù)分享好東西的動力,歡迎點(diǎn)贊!

一個(gè)笨笨的碼農(nóng),我的世界只能終身學(xué)習(xí)!

歡迎加入前端大家庭,里面會經(jīng)常分享一些技術(shù)資源。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72509.html

相關(guān)文章

  • 序員練級攻略2018):前端基礎(chǔ)和底層原理

    摘要:下面我們從前端基礎(chǔ)和底層原理開始講起。對于和這三個(gè)對應(yīng)于矢量圖位圖和圖的渲染來說,給前端開發(fā)帶來了重武器,很多小游戲也因此蓬勃發(fā)展。這篇文章受眾之大,后來被人重新整理并發(fā)布為,其中還包括中文版。 showImg(https://segmentfault.com/img/bVbjM5r?w=1142&h=640); 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 這...

    widuu 評論0 收藏0
  • 序員練級攻略2018):技術(shù)資源集散地

    摘要:,美國著名程序員風(fēng)險(xiǎn)投資家博客和技術(shù)作家。,從年以來,獲獎的計(jì)算機(jī)科學(xué)方面的論文收集。截至年月,已收集超過萬篇預(yù)印本。其中的分類可以認(rèn)為也是一個(gè)論文的集散地。 showImg(https://segmentfault.com/img/bVbjVFa?w=1142&h=640); 這個(gè)是我訂閱 陳皓老師在極客上的專欄《左耳聽風(fēng)》,我整理出來是為了自己方便學(xué)習(xí),同時(shí)也分享給你們一起學(xué)習(xí),當(dāng)...

    Lorry_Lu 評論0 收藏0
  • 序員練級攻略2018):前端性能優(yōu)化和框架

    摘要:,谷歌給的一份性能指南和最佳實(shí)踐。目前而言,前端社區(qū)有三大框架和。隨后重點(diǎn)講述了和兩大前端框架,給出了大量的文章教程和相關(guān)資源列表。我認(rèn)為,使用函數(shù)式編程方式,更加符合后端程序員的思路,而是更符合前端工程師習(xí)慣的框架。 showImg(https://segmentfault.com/img/bVbjQAM?w=1142&h=640); 這個(gè)是我訂閱 陳皓老師在極客上的專欄《左耳聽風(fēng)》...

    VEIGHTZ 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<