簡體   English   中英

JVM:字節碼混淆和JIT

[英]JVM : Bytecode Confusion and JIT

所以這是我學習Java時想到的一個問題。 我們知道(如果我錯了,請糾正我!)字節碼運行在JVM之上。 那么,JVM是否將字節碼轉換為其(JVM)編寫的本機代碼? 如果是這樣,它是否不那么安全?

另外,即時編譯器到底是什么? 它會在需要時進行編譯...我研究了一些資源,但仍未弄清即時部分。

謝謝你的幫助 !

那么,JVM是否將字節碼轉換為其(JVM)編寫的本機代碼?

不,不一定。 不過,如今默認情況下這樣做是最先進的。

如果是這樣,它是否不那么安全?

沒有什么安全? 僅僅因為人們可以在機器代碼中執行不安全的操作(例如,取消引用統一的指針或訪問未分配的內存),並不意味着JIT會生成此類不安全的代碼。

另外,即時編譯器到底是什么?

JVM的一部分將字節碼轉換為本地機器代碼。 名稱“及時”是指代碼在執行時進行編譯(在單獨的線程中)。 完全編譯后,JVM會注意到某些方法已編譯並且可以在計算機級別上調用。

那么,JVM是否將字節碼轉換為其(JVM)編寫的本機代碼?

到目前為止,我所看到的所有JVM實現都將字節代碼轉換為VM為其編寫的本機代碼。 盡管我看不出這樣做的方式和原因會很有用。

另外,即時編譯器到底是什么?

這只是在運行時將字節代碼轉換為本地代碼的過程。 盡管為了提高性能,它是由VM與程序執行並行完成的。 它還通常包括編譯的本機代碼緩存和其他一些性能改進技術。

如果是這樣,它是否不那么安全?

好吧,在某種程度上是這樣。 非常非常小。 對不同操作系統進行了一些與安全相關的修改,從而消除了JIT編譯。 例如,grsecurity Linux內核補丁實際上無法實現JIT(實際上無法執行JIT編譯的代碼)。 還有一個事實是,iOS中實現了類似的內存保護機制(可寫內存頁面無法執行),這使得無法在用戶模式下進行任何JIT編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM