JVM專題之性能優化

運行時優化

方法內聯

> 方法內聯,是指 **JVM在運行時將調用次數達到一定閾值的方法調用替換為方法體本身** ,從而消除調用成本,并為接下來進一步的代碼性能優化提供基礎,是JVM的一個重要優化手段之一。
>
> **注:**
>
> * **C++的inline屬于編譯后內聯,但是java是運行時內聯**

簡單通俗的講就是把方法內部調用的其它方法的邏輯,嵌入到自身的方法中去,變成自身的一部分,之后不再調用該方法,從而節省調用函數帶來的額外開支。

為什么會出現方法內聯呢?

之所以出現方法內聯是因為(方法調用)函數調用除了執行自身邏輯的開銷外,還有一些不為人知的額外開銷。 **這部分額外的開銷主要來自方法棧幀的生成、參數字段的壓入、棧幀的彈出、還有指令執行地址的跳轉** 。比如有下面這樣代碼:

```java
public static void function_A(int a, int b){
        //do something
        function_B(a,b);
    }
  
    public static void function_B(int c, int d){
        //do something
    }

    public static void main(String[] args){
         function_A(1,2);
    }
```

則代碼的執行過程如下:

所以如果java中方法調用嵌套過多或者方法過多,這種額外的開銷就越多。

試想一下想get/set這種方法調用:

```java
public int getI() {
        return i;
    }

public void setI(int i) {
        this.i = i;
    }
```

**很可能自身執行邏輯的開銷還比不上為了調用這個方法的額外開鎖。如果類似的方法被頻繁的調用,則真正相對執行效率就會很低,雖然這類方法的執行時間很短。這也是為什么jvm會在熱點代碼中執行方法內聯的原因,這樣的話就可以省去調用調用函數帶來的額外開支。**

**這里舉個內聯的可能形式:**

```java
 public int  add(int a, int b , int c, int d){
          return add(a, b) + add(c, d);
    }
  
    public int add(int a, int b){
        return a + b;
    }
```

**內聯之后:**

```java
public int  add(int a, int b , int c, int d){
          return a + b + c + d;
    }
```

內聯條件

一個方法如果滿足以下條件就很可能被jvm內聯。

* 熱點代碼。

如果一個方法的執行頻率很高就表示優化的潛在價值就越大。那代碼執行多少次才能確定為熱點代碼?這是根據編譯器的編譯模式來決定的。如果是客戶端編譯模式則次數是1500,服務端編譯模式是10000。次

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40220.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫實訓復習(1)

目錄 一、關于表結構的相關操作(與表中字段的數據操作有區別) (1)往已有的表中添加字段 (2)修改表中已有字段的數據類型 (3)修改已有的表中的字段名和字段類型 (4&a…

TopK問題與堆排序

目錄 TopK問題: 定義: 應用場景: 搜索引擎: 推薦系統: 數據分析: 數據挖掘: TopK問題初階:(數據量較小情況) TopK問題進階:(…

知名品牌因商標痛失市場:114家直營店山寨店7000多家!

奶茶知名品牌“鹿角巷”當年紅遍大江南北,是最早的新茶飲品牌,但是當年商標注冊存在問題,被同行奶茶品牌搶占了先機,發聲明“對大陸商標注冊細則不詳,在商標注冊過程中讓假店鉆了法律空檔”,最夸張的時候全…

qml required property

目錄 前言 示例代碼 創建一個自定義組件(MyComponent.qml) 使用自定義組件(main.qml) 解釋 運行效果 運行時錯誤示例 前言 在 QML 中,你可以使用 required 關鍵字來聲明一個屬性是必需的。這意味著在創建該對象…

如何用Python向PPT中批量插入圖片

辦公自動化辦公中,Python最大的優勢是可以批量操作,省去了用戶粘貼、復制、插入等繁瑣的操作。經常做PPT的朋友都知道,把圖片插入到PPT當中的固定位置是一個非常繁瑣的操作,往往調整圖片時耗費大量的時間和精力。如何能省時省力插…

【數據結構】使用C語言 從零實現一個棧的數據結構

棧 什么是棧?棧是一種特殊的線性表,它只能在在表尾進行插入和刪除操作。 棧的底部稱為棧底,頂部稱為棧頂,所有的操作只能在棧頂進行,也就是說,被壓在下方的元素,只能等待其上方的元素出棧之后…

LeetCode-簡單-回文數

給你一個整數 x ,如果 x 是一個回文整數,返回 true ;否則,返回 false 。 回文數 是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。 例如,121 是回文,…

windows啟動Docker閃退Docker desktop stopped

Windows啟動Docker閃退-Docker desktop stopped 電腦上很早就安裝有Docker了,但是有一段時間都沒有啟動了,今天想啟動啟動不起來了,打開沒幾秒就閃退,記錄一下解決方案。僅供參考 首先,參照其他解決方案,本…

Ubuntu20安裝mysql方法,適用于wsl

itopen組織1、提供OpenHarmony優雅實用的小工具2、手把手適配riscv qemu linux的三方庫移植3、未來計劃riscv qemu ohos的三方庫移植 小程序開發4、一切擁抱開源,擁抱國產化 一、Ubunt20安裝mysql 適用于wsl中安裝mysql sudo apt update# 查看可使用的安裝包…

【刷題匯總--游游的you、腐爛的蘋果、孩子們的游戲(圓圈中最后剩下的數)】

C日常刷題積累 今日刷題匯總 - day0051、游游的you1.1、題目1.2、思路1.3、程序實現 - 蠻力法1.4、程序實現 - 貪心(優化) 2、腐爛的蘋果2.1、題目2.2、思路2.3、程序實現 - bfs 3、孩子們的游戲(圓圈中最后剩下的數)3.1、題目3.2、思路3.3、程序實現 -- 環形鏈表3.4、程序實現…

2個方法教你輕松移除pdf文件編輯限制

PDF是一種常見的辦公文檔格式,常用于文件共享和保護。然而,有時候我們需要編輯PDF文件中的內容,但受到了編輯限制。本文將介紹一些有效的方法,幫助您解除PDF的編輯限制,輕松進行編輯和修改。 一、通過密碼取消PDF“限制…

雷電模擬器報錯remount of the / superblock failed: Permission denied remount failed

報錯截圖 解決方法 打開設置 設置配置system.vmdk可寫入 解決

Transformer和Mamba強強結合!最新混合架構全面開源,推理速度狂飆8倍

最近發現,將Mamba和Transformer模塊混合使用,效果會比單獨使用好很多,這是因為該方法結合了Mamba的長序列處理能力和Transformer的建模能力,可以顯著提升計算效率和模型性能。 典型案例如大名鼎鼎的Jamba:Jamba利用Tr…

ELK優化之Elasticsearch

目錄 1.ELK優化 2.優化 ES 索引設置 2.1 優化 fsync 2.2 優化 refresh 2.3 優化 merge 2.4 優化設置 2.5 打開索引 3.優化線程池配置 3.1 優化的方案 4.鎖定內存,不讓 JVM 使用 Swap 5.減少分片數、副本數 6.ES優化總結 1.ELK優化 ELK優化可以圍繞著 li…

Python統計實戰:時間序列分析之簡單指數平滑和Holt指數平滑

為了解決特定問題而進行的學習是提高效率的最佳途徑。這種方法能夠使我們專注于最相關的知識和技能,從而更快地掌握解決問題所需的能力。 (以下練習題來源于《統計學—基于Python》。請在Q群455547227下載原始數據。) 練習題 下表是某只股票…

二維平面無中心點的聚類算法

問題描述 二維平面上有許多點p(x , y),按照彼此之間的歐式距離進行分為若干個集合。若點p1(x1, y1)與點p(x2, y2)之間距離小于d,則認為二者是鄰居。 算法思路 給數據集的點進行編號,順序遍歷這些點,找出當前點的鄰居,記住已經遍…

模具監視器的選擇要點介紹

模具監視器的選擇要點涉及多個方面,以確保其能夠滿足實際生產需求并提高生產效率。以下是一些關鍵的選擇要點: 一、性能和穩定性 監控精度:選擇模具監視器時,首先要考慮其監控精度,包括溫度、壓力、注射速度等參數的…

Debezium系列之:JVM參數詳解和Debezium集群JVM監控看板制作

Debezium系列之:JVM參數詳解和Debezium集群JVM監控看板制作 一、JVM參數詳解1.jvm_memory_bytes_used2.jvm_memory_bytes_committed3.jvm_memory_bytes_max4.jvm_memory_bytes_init5.jvm_memory_pool_bytes_used6.jvm_memory_pool_bytes_committed7.jvm_memory_pool_bytes_max…

金屬3D打印如何精準選材

隨著3D打印技術的飛躍發展,模具制造領域迎來了前所未有的創新機遇。在眾多3D打印技術中,SLM金屬3D打印以其精度高、復雜結構成型能力,成為眾多行業的優選。然而,金屬打印材料,如何精準選擇,以最大化滿足項目…

linux 內核打印log太多咋辦?

有時候發現,linux 內核打印太多消息了,對有用消息造成了干擾,如果你一個個源文件去關閉打印太麻煩了,有沒有一種更方便的方式來關閉這些消息呢? 對這個需求,內核提供了一個強大而又靈活的方式,…