[英]How does JIT compilation in Java load dynamically compiled instructions into memory?
在Java中,JVM(例如HotSpot)能夠進行JIT編譯,並且該技術用於通過將字節碼編譯為本機代碼來加速執行。 我的問題是,這在技術上是如何發生的? 我的理解是,現代處理器將內存區域標記為只讀部分,以及可執行部分以防止惡意代碼執行。 因此,JVM無法將新的“可執行代碼”寫入它可以訪問的內存空間(即自修改代碼)。 所以,我猜測JVM生成本機代碼,將其寫入文件然后使用操作系統服務將該本機代碼動態加載到內存中,並維護本機代碼(函數)位置的地址的一些內部映射表在操作系統加載了這個動態代碼之后,在內存中,它可以分支到那些本機指令。
我確實看到了這個答案: 如何將JIT編譯的代碼注入內存並執行? ,但我很困惑為什么操作系統會允許用戶程序READ + EXECUTE內存區域。 其他操作系統,即Linux等提供類似的東西,以便JIT工作嗎?
有人可以幫助澄清我的理解嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.