1、单例模式:
单例模式A
public class Singleton {
private Singleton() {
}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
效率最快开始加载的时候就优化。缺点就是没办法延迟加载
单例模式B
public class LazySingleton {
private LazySingleton() {
}
private static LazySingleton instance = null;
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
可以延迟加载但是由于使用了synchronized 效率下降。
单例模式C
public class StaticSingleton {
private StaticSingleton(){
}
private static class SingletonHolder{
private static StaticSingleton instance = new StaticSingleton();
}
public static StaticSingleton getInstance(){
return SingletonHolder.instance;
}
}
通过内部类来加载,这样加载类的时候不会生成对象。而且内部类中也是加载时候完成,这样可以做到线程安全
最后说下单例模式可能失效的地方:
1、反射类的私有方法。
2、进行序列化后在反序列化
2、使用代理模式来进行延迟加载
如果一个类加载的时候需要消耗大量的时间,我们可以对其进行延迟加载。用代理模式就可轻松完成。
public interface DBQuery {
String request();
}
public class DBQureyImpl implements DBQuery {
public DBQureyImpl() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public String request() {
return "string";
}
}
sleep(1000)代表大量耗时等
public class DBProxy implements DBQuery {
private DBQuery instance;
@Override
public String request() {
if (instance == null) {
instance = new DBQureyImpl();
}
return instance.request();
}
}
这样就可以轻松实现,实际操作中我们可以使用动态代理等,当然也可以使用第三方的cglib与javassist,性能上来说cglib无论从生成代理类,还是调用动态方法都占优建议使用。
最后说一句hibernate的延迟加载就是通过cglib来实现的。
分享到:
相关推荐
Java程序性能优化 笔记 脑图
《Java性能优化权威指南》读书笔记(脑图) 原图,看不清楚可以下载这个
第4章 java核心类与性能优化 4.1 散列表类与性能优化 4.1.1 线程同步散列表类 4.1.2 设置arraylist初始化容量 4.1.3 arraylist与linkedlist 4.2 string类与性能优化 4.2.1 字符串累加与性能优化 4.2.2 字符串的...
有幸阅读此书,这是一本大道至简的Java性能优化指南,使得我们的开源项目的代码质量和性能有了飞跃,更能够指导每个Java工程师写出优雅、易阅读、高质量、易于扩展的代码。 ——肖宇(开源组织dromara.org创始人,...
虚拟机》阅读笔记 本 repo 为《深入理解 Java 虚拟机 第2版》的阅读笔记,并对全书内容按照自己的理解进行了一定程度的整理。《深入理解 Java 虚拟机 第2版》原书主要分为了五个部分,这里仅对前四个部分进行讲解,...
第三,详细讨论有关“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍并行的基本设计模式及Java 8对并行程序的支持和改进。第五,介绍高并发框架Akka的使用方法。最后,详细介绍并行程序的调试方法。 ...
本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...
阅读源码的方法包括:先使用框架,然后找一个demo入手,顺藤摸瓜快速静态看一遍框架的主线源码,画出源码主流程图,然后总结框架的一些核心功能点,从这些功能点入手深入到源码的细节,边看源码边画源码走向图,并对...
java笔试题重复字符串优化 Go 程序 这是有助于优化 Go 程序的工具和技术的整理。 它分为两部分——工具和技术。 工具查看帮助您检测代码的 go 命令行工具。 技术查看您可能用来获得性能的想法列表。 最后还有一大堆...
OOM、ANR及性能优化 各种机制 一些比较难理解的技术 启动流程 框架模式 开源库源码分析 其他 设计一套图片异步加载缓存方案 Android UI适配 第二部分 Java JavaSE JavaCollection JavaConcurrent JVM 第三部分 数据...
Java程序性能优化:修炼Java的基本功 剑指Offer:国内的经典面试书 程序员面试金典:国外的经典面试书 Android面试题一天一题: PS:千万记得要去刷! 在此特别感谢戴方勤和唐磊总结的题解(对应leetcode-c
11 性能优化(重点) 5 12 补充话题 5 风格 5 1 先脉络,后细节 5 2 先操作,后原理 5 3 重Annotation,轻xml配置文件 5 资源 5 1 http://www. hibernate.org 5 2 hibernate zh_CN文档 5 3 hibernate annotation ...
Java程序性能优化:修炼Java的基本功 剑指Offer:国内的经典面试书 程序员面试金典:国外的经典面试书 Android面试题一天一题: PS:千万记得要去刷! 在此特别感谢戴方勤和唐磊总结的题解(对应leetcode-c
Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述...
生长 成长文档 文章列表 Java Python 去 Linux MySQL 其他 性能优化 互联网资源数字图书馆 参考表 读书笔记 自传 增长由双鬼带单采用进行许可。
逻辑应该简单明了,使错误难以隐藏,依赖最小化以简化维护,根据明确的策略完成错误处理,以及接近最佳的性能,以免诱使人们通过无原则的优化使代码变得混乱。 干净的代码可以很好地做一件事。 对象的Grady Booch...