性能浪费的日志案例和使用Lambda优化日志案例
有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费。而Lambda表达式是延迟执行的,这正好可以作为解决方案,提升性能
性能浪费的日志案例
日志可以帮助我们快速的定位问题,记录程序运行过程中的情况,以便项目的监控和优化
一种典型的场景就是对参数进行条件使用,例如对日志消息进行拼接后,在满足条件的情况下进行打印输出
package com.yang.Test.MyFunctionalInterfaceStudy.Lambda;
/**
* 日志案例
*
* 发现一下代码存在的一些性能浪费问题
* 调用showLog方法传递的第二个参数是一个拼接后的字符串
* 先把字符串拼接好,然后在调用showLog方法
* showLog方法中如果传递的日志的级别如果不是1级
* 那么就不会显示拼接后的字符串
* 然后感觉字符串就白拼接了,存在了浪费
*/
public class Logger {
//定义一个根据日志级别,显示日志信息的方法
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(1,msg1+msg2+msg3);
}
}
优化:
package com.yang.Test.MyFunctionalInterfaceStudy.Lambda;
/**
* 使用Lambda优化日志案例
* Lambda的特点:延迟加载
* Lambda的使用前提:必须存在函数式i金额口
*/
public class LambdaLog {
//定义一个显示日志的方法,方法的参数传递日志的等级和MessageBuilder接口
public static void showLog(int level , MessageBuilder messageBuilder){
//对日志的等级进行判断,如果是1级则调用messageBuilder中的builderMessage方法
if (level == 1) {
System.out.println(messageBuilder.builderMessage());
}
}
public static void main(String[] args) {
String msg1 = "Hello";
String msg2 = "World";
String msg3 = "Java";
//调用showLog方法
showLog(1,()->{return msg1+msg2+msg3;});
}
}
package com.yang.Test.MyFunctionalInterfaceStudy.Lambda;
@FunctionalInterface
public interface MessageBuilder {
//定义一个拼接消息的抽象方法,返回拼接好的字符串
String builderMessage();
}
使用Lambda表达式作为参数传递,仅仅是吧参数传递到showLog方法中
只有满足条件,日志的等级是1
才会调用接口中的方法
才会进行字符串的拼接
如果不满足就不会执行,拼接字符串的代码也不会执行
就不会存在性能的浪费
性能浪费的日志案例和使用Lambda优化日志案例的更多相关文章
- SQL Server中的事务日志管理(8/9):优化日志吞吐量
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- MongoDB应用案例:使用 MongoDB 存储日志数据
线上运行的服务会产生大量的运行及访问日志,日志里会包含一些错误.警告.及用户行为等信息,通常服务会以文本的形式记录日志信息,这样可读性强,方便于日常定位问题,但当产生大量的日志之后,要想从大量日志里挖 ...
- <JVM下篇:性能监控与调优篇>05-分析GC日志
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- DeepMind提出新型超参数最优化方法:性能超越手动调参和贝叶斯优化
DeepMind提出新型超参数最优化方法:性能超越手动调参和贝叶斯优化 2017年11月29日 06:40:37 机器之心V 阅读数 2183 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...
- SQL Server中的事务日志管理(7/9):处理日志过度增长
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- 解决Linux下Tomcat日志目录下的catalina.log日志文件过大的问题
本文摘自:(http://blog.csdn.net/stevencn76/article/details/6246162) 分类: Java技术专区2011-03-13 12:25 5017人阅读 ...
- SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- SQL Server中的事务日志管理(3/9):事务日志,备份与恢复
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- SQL Server中的事务日志管理(2/9):事务日志架构概述
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
随机推荐
- 交互式 .Net
名词解析 1. 交互式 交互式是指输入代码后可直接运行该代码,然后持续输入运行代码. 2. 交互式 .Net .Net 是一种编译型语言,不像 python 这类的脚本型语言,可以边输入代码边运行结果 ...
- kernel 劫持seq_operations && 利用pt_regs
kernel 劫持seq_operations && 利用pt_regs 劫持seq_operations进行栈迁移 seq_operations是一个大小为0x20的结构体,在打开/ ...
- .Net 6 WebApi 项目部署到 Linux 系统上的 Docker 容器
1.创建一个基础的WebApi项目 注意:因为发布时候,Dockerfile文件必须和解决方案.cspro文件放在同级,所以建议勾上这个,当时遇到这个问题,导致打包镜像时找不到.cspro文件,搞了好 ...
- 个人冲刺(二)——体温上报app(一阶段)
任务:完成了WenData类的编写,同时完成了SecondActivity.java SecondActivity.java package com.example.helloworld; impor ...
- Javabean使用实例
1.login.jsp <%@ page language="java" contentType="text/html; charset=utf-8" p ...
- 关于SpringBoot Admin server 监控注意事项
当你导入了依赖 <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-bo ...
- 硬件开发笔记(四):硬件开发基本流程,制作一个USB转RS232的模块(三):设计原理图
前者 前面建立好的基础的元器件,下面开始设计原理图. 需求 USB转RS232,输出RS232 可以选择性输出5V的TTL 可以选择性输出3.3V的TTL 设计原理图 步骤一:CH340G ...
- SpringCloud 服务治理
目录 1. Eureka 1.1 Eureka 介绍 1.2 Eureka 快速入门 父工程 Eureka Server(子工程) pom.xml 启动类 application.yml Eureka ...
- .NET6 开源之JSON 2 SQL (JORM框架)
什么是JORM框架? 全称 :Json Object Relational Mapping ,它是通过JSON 对象 去实现数据库的一个关系映射 ,我理想中完整的JORM包含功能有 ·1.表权授 ...
- Leetcode----<Diving Board LCCI>
题解如下: public class DivingBoardLCCI { /** * 暴力解法,遍历每一种可能性 时间复杂度:O(2*N) * @param shorter * @param long ...