性能浪费的日志案例与使用Lambda优化日志案例

Lambda的延迟执行

有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费。而Lambda表达式是延迟执行的,这正好可以作为解决方案,提升性能

性能浪费的日志案例

注:日志可以帮助我们快速的定位问题,记录程序运行过程中的情况,以便项目的监控和优化。
一种典型的场景就是对参数进行有条件使用,例如对日志消息进行拼接后,在满足条件的情况下进行打印输出∶ 

package day01.demo01;
/*
日志案例
发现以下代码存在的一些性能浪费的问题
调用showLog方法,传递的第二个参数是一个拼接后的字符串先把字符串拼接好,然后在调用showLog方法
showvLog方法中如果传递的日志等级不是1级那么就不会是如此拼接后的字符串
所以感觉字符串就白拼接了,存在了浪费
 */
public class demo01Override {
    public static  void  showLog(int level,String messsage){
        if (level==1){
            System.out.println(messsage);
        }
    }

    public static void main(String[] args) {
        String m1 ="Hello,Word ";
        String m2 ="offer,World ";
        String m3 ="wx,qq";

        showLog(1,m1+m2+m3);
    }
}

 使用Lambda优化日志案例

package day01.demo01;



/*
使用Lambda优化日志案例L ambda的特点:延迟加载
Lambda的使用前提,必须存在函数式接口
 */
public class Dem02Lamber {
    public static  void showLog(int level, MessageBuilder mb){
        if (level==1){
            System.out.println(mb.builderMessage());
        }
    }

    public static void main(String[] args) {
        String m1 ="HelloWord ";
        String m2 ="offerWorld ";
        String m3 ="wxqq";

        /*
        使用Lambda表达式作为参数传递,仅仅是把参数传递到showLog方法中只有满足条件,日志的等级是1级
        才会调用接口MNessageBuiLder中的方法builderMessage才会进行字符串的拼接
        如果条件不满足,日志的等级不是1级
        那么MessageBuilder接口中的方法builderMessage也不会执行所以拼接字符串的代码也不会执行
        所以不会存在性能的浪费
         */

        showLog(2,()->{
            return m1+m2+m3;
        });
        showLog(1,()->{
            System.out.println("不满足条件不执行");
            return m1+m2+m3;
        });


    }
}

 

posted @ 2022-07-20 10:51  zj勇敢飞,xx永相随  阅读(38)  评论(0编辑  收藏  举报