Re: [閒聊] 魔法 JNI

看板java作者 (LetMeGoogleThatForYou)時間14年前 (2010/04/30 07:42), 編輯推噓4(403)
留言7則, 5人參與, 最新討論串2/4 (看更多)
※ 引述《sbrhsieh (偶爾想擺爛一下)》之銘言: : 這一篇不是要介紹 JNI 的觀念。 : 有興趣的人可以把本文當作軼事看。 : 沒有興趣的人可以當作新聞看。 : 完全不懂 JNI,以後也完全不會/想用到 JNI 者,就可以離開不看。 要閒聊的話我也要參一腳… 我第一次實際接觸到 JNI 是剛開始摸 Java 時, 抱著 java.lang.System 的 javadoc 在讀, 讀著讀著就覺得奇妙… 這個天天在用的 System.out... 是個 public static field 由於不能改變這個 field 的值,可見得應該是宣告成 final 但又有這個奇妙的 method static void setOut(PrintStream out) Reassigns the "standard" output stream. 至此百思不得其解…只好把 java.lang.System 的原始碼挖出來看 裡面果然是長這個樣子 public final static PrintStream out = nullPrintStream(); 再追下去就看到了 private static native void setOut0(PrintStream out); 才知道有 JNI 這東西… 最後順藤摸瓜就爬到了這本聖經 http://java.sun.com/docs/books/jni/html/jniTOC.html 第十章,每個用 JNI 的人都應該要讀三遍 http://java.sun.com/docs/books/jni/html/pitfalls.html JNI 的行為對來自於 C/C++ 世界的人來說沒什麼奇怪的 C/C++ 裡的魔術已經夠多了 XD 但就如同 sbrhsieh 所說的,對純 Java 人來說, JNI的行為的確跟 black magic/voodoo 差不多 :D -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 65.87.177.87 ※ 編輯: AmosYang 來自: 65.87.177.87 (04/30 07:52)

04/30 08:30, , 1F
這種好東西竟然開放下載耶,感謝分享
04/30 08:30, 1F

04/30 09:53, , 2F
C#裡就很直接的給你unsafe區塊,等於是挖個窗口直接做
04/30 09:53, 2F

04/30 10:30, , 3F
感謝分享 很棒的資料!!
04/30 10:30, 3F

04/30 15:43, , 4F
實際上JVM本身就沒有enforce final field 的不變性質在..
04/30 15:43, 4F

04/30 15:44, , 5F
定義該 field 的 class 內。
04/30 15:44, 5F

04/30 15:46, , 6F
final field setter method 可以在 bytecode level 實現
04/30 15:46, 6F

04/30 20:09, , 7F
跟我一樣 不過我是去找數學函式XDD
04/30 20:09, 7F
文章代碼(AID): #1BsXbwLH (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 2 之 4 篇):
文章代碼(AID): #1BsXbwLH (java)