亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 編譯器可以為非靜態方法做早期綁定嗎?

Java 編譯器可以為非靜態方法做早期綁定嗎?

一只名叫tom的貓 2023-03-17 13:48:48
假設我有以下課程:public class MyClass {    public void doSomething() {        System.out.println("doing something.");    }}讓我們進一步假設,我的項目所做的就是調用該.something()方法。沒有壓倒一切或任何其他有趣的事情發生。MyClass myObj = new MyClass();myObj.doSomething();編譯器是否javac注意到此方法調用未被覆蓋,并將綁定優化為“早期綁定”?我是出于好奇才問的;在任何實際應用程序中,我當然會在我的代碼中散布final、static和private。
查看完整描述

1 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

字節碼編譯器(如javac)通常不會對實例方法調用進行早期綁定:

  1. 單獨編譯類的 Java 模型意味著這種優化只能在類調用其方法之一時應用。(如果javac假設跨類進行早期綁定,更改和重新編譯一個類可能會導致綁定不正確。)

  2. 沒有太多價值,因為 JIT 編譯器(或 AOT 編譯器生成器)是執行大多數優化的地方。

現代 JVM 中的 JIT 編譯器根據已加載的完整類集(到目前為止)進行廣泛的優化。這包括優化方法調度和內聯方法調用。此外,JIT 編譯器足夠智能,可以跟蹤關鍵優化,并在動態加載新類等導致先前優化無效時重新編譯。


查看完整回答
反對 回復 2023-03-17
  • 1 回答
  • 0 關注
  • 88 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號