日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

性能浪费的日志案例

發布時間:2024/4/13 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 性能浪费的日志案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數式編程

在兼顧面向對象特性的基礎上,Java語言通過Lambda表達式與方法引用等,為開發者打開了函數式編程的大門。
下面我們做一個初探。

Lambda的延遲執行

有些場景的代碼執行后,結果不一定會被使用,從而造成性能浪費。而Lambda表達式是延遲執行的,這正好可以作為解決方案,提升性能。

性能浪費的日志案例

注:日志可以幫助我們快速的定位問題,記錄程序運行過程中的情況,以便項目的監控和優化。

一種典型的場景就是對參數進行有條件使用,例如對日志消息進行拼接后,在滿足條件的情況下進行打印輸出:

package com.learn.demo02.Lambda; /*日志案例發現以下代碼存在的一些性能浪費的問題調用showLog方法,傳遞的第二個參數是一個拼接后的字符串先把字符串拼接好,然后在調用showLog方法showLog方法中如果傳遞的日志等級不是1級那么就不會是如此拼接后的字符串所以感覺字符串就白拼接了,存在了浪費*/ public class Demo01Logger {//定義一個根據日志的級別,顯示日志信息的方法public static void showLog(int level, String message){//對日志的等級進行判斷,如果是1級別,那么輸出日志信息if(level==1){System.out.println(message);}}public static void main(String[] args) {//定義三個日志信息String msg1 = "Hello";String msg2 = "World";String msg3 = "Java";//調用showLog方法,傳遞日志級別和日志信息showLog(2,msg1+msg2+msg3);} }

這段代碼存在問題:無論級別是否滿足要求,作為log 方法的第二個參數,三個字符串一定會首先被拼接并傳入方法內,然后才會進行級別判斷。如果級別不符合要求,那么字符串的拼接操作就白做了,存在性能浪費。

備注:SLF4J是應用非常廣泛的日志框架,它在記錄日志時為了解決這種性能浪費的問題,并不推薦首先進行字符串的拼接,而是將字符串的若干部分作為可變參數傳入方法中,僅在日志級別滿足要求的情況下才會進行字符串拼接。例如: LOGGER.debug("變量{}的取值為{}。", "os", "macOS") ,其中的大括號{} 為占位符。如果滿足日志級別要求,則會將“os”和“macOS”兩個字符串依次拼接到大括號的位置;否則不會進行字符串拼接。這也是一種可行解決方案,但Lambda可以做到更好。

總結

以上是生活随笔為你收集整理的性能浪费的日志案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。