`
donald3003a
  • 浏览: 63889 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
  • 淼淼E馒头: 这举列有点不恰当啊。。电影人和不同类型的电影。是两个不同概念 ...
    合成模式

java 性能优化读书笔记(一)

阅读更多
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程序性能优化 笔记 脑图

    Java性能优化.png

    《Java性能优化权威指南》读书笔记(脑图) 原图,看不清楚可以下载这个

    Java优化编程(第2版)

    第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-performance:Java系统性能优化实战

    有幸阅读此书,这是一本大道至简的Java性能优化指南,使得我们的开源项目的代码质量和性能有了飞跃,更能够指导每个Java工程师写出优雅、易阅读、高质量、易于扩展的代码。 ——肖宇(开源组织dromara.org创始人,...

    高级java笔试题-understanding-the-jvm:《深入理解Java虚拟机》阅读笔记

    虚拟机》阅读笔记 本 repo 为《深入理解 Java 虚拟机 第2版》的阅读笔记,并对全书内容按照自己的理解进行了一定程度的整理。《深入理解 Java 虚拟机 第2版》原书主要分为了五个部分,这里仅对前四个部分进行讲解,...

    实战Java高并发程序设计 .pdf 下载

    第三,详细讨论有关“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍并行的基本设计模式及Java 8对并行程序的支持和改进。第五,介绍高并发框架Akka的使用方法。最后,详细介绍并行程序的调试方法。 ...

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    深入理解Java源码:提升技术功底,深度掌握技术框架,快速定位线上问题

    阅读源码的方法包括:先使用框架,然后找一个demo入手,顺藤摸瓜快速静态看一遍框架的主线源码,画出源码主流程图,然后总结框架的一些核心功能点,从这些功能点入手深入到源码的细节,边看源码边画源码走向图,并对...

    java笔试题重复字符串-optimizing-go-programs:关于优化Go程序的研讨会材料

    java笔试题重复字符串优化 Go 程序 这是有助于优化 Go 程序的工具和技术的整理。 它分为两部分——工具和技术。 工具查看帮助您检测代码的 go 命令行工具。 技术查看您可能用来获得性能的想法列表。 最后还有一大堆...

    高级java笔试题-Android-Interview:收集知识点自学使用

    OOM、ANR及性能优化 各种机制 一些比较难理解的技术 启动流程 框架模式 开源库源码分析 其他 设计一套图片异步加载缓存方案 Android UI适配 第二部分 Java JavaSE JavaCollection JavaConcurrent JVM 第三部分 数据...

    java开发笔试题-AndroidInterviews::ox:Android面试的有用材料

    Java程序性能优化:修炼Java的基本功 剑指Offer:国内的经典面试书 程序员面试金典:国外的经典面试书 Android面试题一天一题: PS:千万记得要去刷! 在此特别感谢戴方勤和唐磊总结的题解(对应leetcode-c

    hibernate笔记

    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 ...

    leetcode下载-interview3:镜像来自//github.com/hujiaweibujidao/AndroidInterview

    Java程序性能优化:修炼Java的基本功 剑指Offer:国内的经典面试书 程序员面试金典:国外的经典面试书 Android面试题一天一题: PS:千万记得要去刷! 在此特别感谢戴方勤和唐磊总结的题解(对应leetcode-c

    asp.net知识库

    Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述...

    增长:个人增长资料

    生长 成长文档 文章列表 Java Python 去 Linux MySQL 其他 性能优化 互联网资源数字图书馆 参考表 读书笔记 自传 增长由双鬼带单采用进行许可。

    worldwindjava源码-CleancodeNotes:这个repo包含来自RobertC.Martin的书CleanCode:AHan

    逻辑应该简单明了,使错误难以隐藏,依赖最小化以简化维护,根据明确的策略完成错误处理,以及接近最佳的性能,以免诱使人们通过无原则的优化使代码变得混乱。 干净的代码可以很好地做一件事。 对象的Grady Booch...

Global site tag (gtag.js) - Google Analytics