定义Logger为什么要用static和final?为什么不用getClass()?
为什么 定义 不用 static Final 要用 Logger
2023-09-14 08:58:22 时间
有一次线上发现,redis连接很慢,最后同事说,有个原因就是getClass()
private final Logger logger = LoggerFactory.getLogger(getClass());
因为这不是一个静态常量,在序列化这个变量的时候,有的序列化方法并不好用,里边有一个class.forName()方法,是个阻塞性的,导致了高并发多线程的时候,序列化很慢。
进而redis很慢。(好像和redis没什么关系汗)
以下转自:https://www.cnblogs.com/jxd283465/p/11726678.html
private static final Logger logger= LoggerFactory.getLogger(ShiroConfig.class);
(1)出于资源利用的考虑,Logger的构造方法参数是Class,决定了Logger是根据类的结构来进行区分日志,所以一个类只要一个Logger就可以了,故static
(2)final表示一种编程习惯,表示该类的Logger只是记录该类的信息,否则日志会无法提供可以令人信服的记录
- 定义成static final,logger变量不可变,读取速度快
- static 修饰的变量是不管创建了new了多少个实例,也只创建一次,节省空间,如果每次都创建Logger的话比较浪费内存;final修饰表示不可更改,常量
- 将域定义为static,每个类中只有一个这样的域.而每一个对象对于所有的实例域却都有自己的一份拷贝.,用static修饰既节约空间,效率也好。final 是本 logger 不能再指向其他 Logger 对象
相关文章
- alpine镜像体积为什么能够这么小
- SAP UI5 FileUploader 控件深入介绍 - 为什么需要一个隐藏的 iframe 试读版
- 为什么CRM WebClient UI每次点了回车都会触发到后台的roundtrip
- SAP S/4HANA生产订单创建之后,为什么会自动执行action
- 说说Android的广播(4) - 前台队列为什么比后台队列快?
- 为什么傅里叶变换可以代替自注意力机制
- 5.1特辑 | 为什么显示有票你却抢不到?技术揭秘12306如何保证车票不超卖
- 为什么使用缓存,缓存带来的问题,分布式缓存,单机架构,分布式架构
- 辛星解读为什么PHP须要模板
- 为什么 0.1+0.2=0.30000000000000004
- 为什么有人说“千万不要去小公司”?三点原因很现实,这些坑别踩
- 朋友工作两年、月薪涨到 28k ,同样是测试工程师为什么差距这么大?
- systemd: SULOGIN 为什么要大写呢; sulogin
- 为什么要try-catch?
- 从InfluxDB到TDengine,阳光氢能为什么会做出这个选择?
- 第一篇:硬核问题,为什么重写equals()就要重写hashCode()?
- verilog HDL中定义位宽到底是[高位:0]还是[0:高位] 为什么看到了两种写法
- 并发编程— wait 与 notify 为什么是 Object 的成员方法?