首页 > 编程语言 >Java开发手册中-要求日志输出时字符串变量之间的拼接使用占位符与使用字符串拼接性能对比

Java开发手册中-要求日志输出时字符串变量之间的拼接使用占位符与使用字符串拼接性能对比

时间:2024-07-18 15:56:53浏览次数:12  
标签:Java errorMessage errorCode 拼接 测试 org 字符串 import

场景

Java中使用JMH(Java Microbenchmark Harness 微基准测试框架)进行性能测试和优化:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131723751

参考以上性能测试工具的使用。

Java开发手册中有这样一条:

【强制】在日志输出时,字符串变量之间的拼接使用占位符的方式。

说明:因为 String 字符串的拼接会使用 StringBuilder 的 append()方式,有一定的性能损耗。使用占位符仅是替换动作,

可以有效提升性能。

正例:logger.debug("Processing trade with id: {} and symbol: {}", id, symbol);

 

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

编写如下测试代码

import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.TimeUnit;

//测试完成时间
@BenchmarkMode(Mode.AverageTime)
//设置统计结果的时间单位
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 2,time = 1,timeUnit = TimeUnit.SECONDS)
//测试次数和时间,参数同上
@Measurement(iterations = 5,time = 1,timeUnit = TimeUnit.SECONDS)
//fork一个线程,进行 fork 的次数,可用于类或者方法上。如果 fork 数是 2 的话,则 JMH 会 fork 出两个进程来进行测试。
@Fork(1)
//通过 State 可以指定一个对象的作用范围,JMH 根据 scope 来进行实例化和共享操作。@State 可以被继承使用,
//Scope.Thread:默认的 State,每个测试线程分配一个实例
@State(Scope.Thread)
public class LoggerSeizeTest {

    Logger logger = LoggerFactory.getLogger(getClass());

    public static void main(String[] args) throws RunnerException {
        //启动基准测试
        Options options = new OptionsBuilder()
                .include(LoggerSeizeTest.class.getSimpleName())//要导入的测试类
                .build();
        new Runner(options).run();//执行测试
    }

    @Benchmark
    public void stringBuilderLogTest(){
        Integer errorCode = 500;
        String errorMessage = "这是一个错误信息";
        logger.debug("errorCode:"+errorCode+",errorMessage:"+errorMessage);
    }

    @Benchmark
    public void stringSeizeLogTest(){
        Integer errorCode = 500;
        String errorMessage = "这是一个错误信息";
        logger.debug("errorCode:{},errorMessage{}",errorCode,errorMessage);
    }
}

测试结果

//Benchmark                             Mode  Cnt    Score    Error  Units
//LoggerSeizeTest.stringBuilderLogTest  avgt    5  136.842 ± 99.361  ns/op
//LoggerSeizeTest.stringSeizeLogTest    avgt    5    2.063 ±  0.186  ns/op

标签:Java,errorMessage,errorCode,拼接,测试,org,字符串,import
From: https://www.cnblogs.com/badaoliumangqizhi/p/18309741

相关文章

  • java八股复习指南-计网篇
    网络分层模型osi七层模型tcp-ip四层模型应用层传输层网络层网络接口层与osi七层模型对应为:应用层主要提供两个终端设备上应用之间的消息交换的服务。它定义了消息交换的格式。常见协议有:结合常见的协议,可以这样理解应用层:应用层就是专门为特定的应用之间的通信提......
  • 基于SpringBoot的宠物领养系统-07863(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP
    摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对宠物领养系统......
  • Java中的分布式任务调度与Quartz框架应用
    Java中的分布式任务调度与Quartz框架应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代软件开发中,分布式系统的任务调度变得越来越重要。本文将深入探讨如何利用Java中的Quartz框架来实现分布式任务调度,以及在实际应用中的一些最佳实践和设计考虑......
  • 如何在Java中实现基于Kafka的事件驱动架构
    如何在Java中实现基于Kafka的事件驱动架构大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!事件驱动架构在现代分布式系统中被广泛应用,它通过异步事件传递来解耦系统中的各个组件,提高系统的可扩展性和灵活性。ApacheKafka作为一个高吞吐量的分布式消息队......
  • Java中的大规模数据处理与MapReduce设计
    Java中的大规模数据处理与MapReduce设计大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!随着数据规模的不断增大,大规模数据处理变得越来越重要。在Java领域,MapReduce作为一种经典的数据处理模型,在处理海量数据时展现了强大的能力。本文将介绍如何在Java中......
  • 使用Java和Apache Thrift构建高效的RPC服务
    使用Java和ApacheThrift构建高效的RPC服务大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!ApacheThrift是一种开源的RPC框架,支持多种编程语言,能够高效地进行跨语言服务调用。本文将介绍如何使用Java和ApacheThrift构建高效的RPC服务,包括Thrift的基础配......
  • Java中的并发数据结构与多线程优化技术
    Java中的并发数据结构与多线程优化技术大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在多线程编程中,并发数据结构和优化技术是提高系统性能和可靠性的关键。Java提供了丰富的并发数据结构和多线程优化技术,本文将详细介绍常用的并发数据结构及其使用方法......
  • 使用Java和Hazelcast构建高可用的分布式缓存系统
    使用Java和Hazelcast构建高可用的分布式缓存系统大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统中,缓存是提高系统性能和可扩展性的关键组件之一。Hazelcast是一种高性能、易用的分布式内存数据网格,支持多种数据结构和分布式计算。本文将介绍......
  • Java注解之元注解
    说明:介绍各种元注解的作用@Documented作用:指示使用此注解的元素(类、方法、字段等)应当被javadoc工具记录。详细说明:通常注解不会出现在生成的API文档中,但如果注解使用了@Documented,那么该注解将包含在javadoc中。这样可以使开发者在阅读文档时看到注解的存在以及......
  • Java中的异常处理与容错设计最佳实践
    Java中的异常处理与容错设计最佳实践大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java编程中,异常处理是一个非常重要的环节。良好的异常处理和容错设计可以提升系统的健壮性和可维护性。本文将介绍Java中的异常处理与容错设计最佳实践,包括异常的分类......