首页 > 编程语言 >java性能调优记录

java性能调优记录

时间:2024-10-06 10:45:18浏览次数:1  
标签:Singleton java 实例 记录 instance 调优 static null class

五、设计模式调优

单例模式

最简单的单例模式及问题分析

// 懒汉模式
public final class Singleton {
private static Singleton instance= null;// 不实例化
private Singleton(){

if (instance != null) {
throw new RuntimeException("Use getInstance() method to get the single instance of this class.");
}

}// 构造函数
public static Singleton getInstance(){// 通过该函数向整个系统提供实例
if(null == instance){// 当 instance 为 null 时,则实例化对象,否则直接返回对象
instance = new Singleton();// 实例化对象
}
return instance;// 返回已存在的对象
}
}

问题分析:存在多次实例化的可能,多个线程同时修改不同单例对象可能导致数据不一致,因为单例对象可能持有计数器或者配置项等。

先创建的对象会不会被jvm垃圾回收?

可能会,前提是没有被其他对象引用,如创建并使用他的线程结束,该对象就不会被引用,下一次垃圾回收就会回收掉。

双重检查方式:

// 懒汉模式 + synchronized 同步锁 + double-check
public final class Singleton {
private volatile static Singleton instance= null;// 不实例化
private Singleton(){

if (instance != null) {
throw new RuntimeException("Use getInstance() method to get the single instance of this class.");
}

}// 构造函数
public static Singleton getInstance(){// 加同步锁,通过该函数向整个系统提供实例
if(null == instance){// 第一次判断,当 instance 为 null 时,则实例化对象,否则直接返回对象
synchronized (Singleton.class){// 同步锁
if(null == instance){// 第二次判断
instance = new Singleton();// 实例化对象
}
}
}
return instance;// 返回已存在的对象
}
}

双重检查模式的变量需要用volatile,volatile有两个作用:可见性,禁止指令重排序。

 静态内部类方式:

// 懒汉模式 内部类实现
public final class Singleton {

// 构造函数
private Singleton() {

if (InnerSingleTon.instance != null) {
throw new RuntimeException("Use getInstance() method to get the single instance of this class.");
}

}
// 内部类实现
public static class InnerSingleton {
private static Singleton instance=new Singleton();// 自行创建实例
}

public static Singleton getInstance() {
return InnerSingleton.instance;// 返回内部类中的静态变量
}
}

静态内部类和外部类的加载是独立的,外部类被加载时,静态内部类不会被立即加载。静态内部类只有在被主动引用时(例如创建静态内部类的实例或访问其静态成员)才会被加载。同样地,当静态内部类被加载时,它也不会导致外部类重新加载或初始化。

 装饰器模式

 六、数据库性能调优

快照读:当执行普通的select时,mysql不会加锁,而是读取数据库快照,在整个事务生命周期都是获取同一个快照数据,不糊收到其他事务更新或插入影响。快照并不是事务开始时的快照,而是第一次普通查询时被锁定的快照。

但是并不是每次查询结果不会变,如事务B插入一条原本不存在的数据,事务A修改了这条数据,此时事务A再查询是可以查到的。

当前读:当读取的是需要加锁的的操作,读取的是当前最新数据,当前读会阻止其他事务对被锁住的数据进行修改,并确保你看到的是最新的、当前事务的状态。

  • SELECT ... FOR UPDATE
  • SELECT ... LOCK IN SHARE MODE
  • UPDATEDELETE

间隙锁:需要注意mysql查询又间隙锁,即使只查询一条数据如order_no=4,数据分布是1,3,6,8,那么会锁定3到6之间的间隙,这种操作可以防止3-6之间的幻读。但是大于6的数据如7,20都是可以在另一个事务B中正常插入的,并且事务A中可以查到。

 分库分表:

分为水平拆分和垂直拆分:水平拆分是把数据分布在不同库上,垂直拆分是指把表字段再进行拆分。

分布式锁:redis官方推出的redisson框架。

 

标签:Singleton,java,实例,记录,instance,调优,static,null,class
From: https://www.cnblogs.com/gaoshikenan/p/18435345

相关文章

  • java毕业设计-基于Springboot的助农产品采购平台【代码+论文+PPT】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、部分代码;5、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:Java1.8框架:SSM数据库:MySQL5.7、8.0开发工具:IntelliJIDEA旗舰版其他:Maven3.8以上二、系统功能商家管理:负责商家入驻、审核、信息及商品上架权限......
  • Nodered学习记录-MQTT
    安装EMQXEMQX(以前称为EMQ)是一个开源的、高度可扩展且高可用的分布式MQTT消息代理,专为物联网(IoT)、机器对机器(M2M)通信和移动应用程序设计。它支持MQTT和其他IoT协议如CoAP/LwM2M,能够处理数百万并发连接,并提供强大的消息路由能力。通过docker安装官方文档$dockerpullem......
  • idea源码学习记录-vfs
    参考https://plugins.jetbrains.com/docs/intellij/virtual-file-system.html注:我写笔记用的源码版本是232.8660.185我的idea版本为241.17011.79当前的官方文档用的版本是242.23339.11vfs是idea的虚拟文件系统(VirtualFileSystem)TheVirtualFileSystem(VFS)isa......
  • 团队训练记录2024.10.5
    这次double精度上卡了,赛时和学校强队差两题题目链接:https://codeforces.com/gym/104023/problemA.Dunai队友写的,答案在总冠军位人数和位置上冠军加非冠军人数最小取min?#include<bits/stdc++.h>#definetest(i)cout<<#i<<""<<i<<""<<endl;#defin......
  • [Javascript] Circular dependency
    Weoftenseecirculardependency,whyit'saproblem,whyweshouldavoiditandhwotoavoidit?  Let'sseeanyexamplefirst//main.jsimportAfrom"moduleA"//moduleA.jsimportBfrom"./moduleB"console.log("M......
  • 算法练习记录(24.10.5)
    1.B.BrightnessBegins思路要求最后的灯泡打开的数量,由于一开始灯泡是打开的,如果最后还需要打开,那么操作数量一定是偶数,移目至操作前提,需要灯泡的序号能整除\(x\),由于遍历1~x,推出最后灯泡\(i\)亮的条件是:\(1~i\)中有偶数个\(i\)的因数,即\(i\)有偶数个因数,反之即有奇数个......
  • java+vue计算机毕设防疫工作人员管理系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球公共卫生事件的频发,防疫工作已成为维护社会稳定和人民健康的关键环节。防疫工作人员作为抗击疫情的前线力量,其管理和调度直接关系到疫情防控......
  • java+vue计算机毕设房屋出租管理系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人口流动性的增强,房屋租赁市场日益繁荣,成为解决居民居住需求的重要途径。然而,传统的房屋出租管理方式存在诸多不便,如信息不透......
  • 面向-SAP-ABAP-开发者的-JavaScript-基础知识-全-
    面向SAPABAP开发者的JavaScript基础知识(全)原文:JavaScriptEssentialsforSAPABAPDevelopers协议:CCBY-NC-SA4.0一、JavaScript简介本章为ABAP开发者提供了JavaScript的介绍。我们先从学习JavaScript的必备知识开始。然后,我们将介绍JavaScript的基础知识,以......
  • 「分数规划」学习笔记及做题记录
    「分数规划」学习笔记及做题记录做题时发现不会分数规划,赶紧来学一下。分数规划用于求解下面一类问题:有\(n\)个物品,第\(i\)个物品的价值为\(a_i\),费用为\(b_i\)。从中选择若干个物品,使得价值与费用的比值\(\dfrac{\suma}{\sumb}\)最大/最小。另一种更严谨的表示方......