`
donald3003a
  • 浏览: 65587 次
  • 性别: 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游戏编程读书笔记

    通过阅读《Java游戏编程读书笔记》这本书,你可以深入了解这些概念并学习如何将它们应用到实际项目中。文档中的内容可能涵盖了Java游戏开发的基本原理、代码示例、最佳实践以及常见问题的解决方案。通过深入学习和...

    java编程思想读书笔记

    ### Java编程思想读书笔记 #### 一、Java与C++的区别及内存管理 在学习Java的过程中,我们常常会拿它与C++进行比较。这两门语言虽然有着相似之处,但也有许多不同点。 1. **内存管理:** - C++提供了更为底层的...

    java核心思想读书笔记

    从标题“java核心思想读书笔记”和描述可以看出,这份资料是作者结合《Java核心思想》一书和其他网络资源整理而成,适合不同水平的Java学习者,特别是初学者和有经验的工程师。 1. **Java的设计目标** - 不同于...

    android应用性能优化最佳实践读书笔记

    在Android应用开发中,性能优化是一项至关重要的任务,它直接影响到用户的体验和应用程序的市场竞争力。"Android应用性能优化最佳实践"这本书深入探讨了如何提升Android应用的性能,以下是一些核心知识点的总结: 1...

    基于java 的阅读器界面优化

    总的来说,基于Java的阅读器界面优化是一个综合性的任务,涉及界面设计原则、用户体验、文件解析、性能优化、事件处理和无障碍设计等多个方面。通过持续学习和实践,开发者可以构建出更加优秀的阅读器应用,满足不同...

    java完美经典读书笔记

    以上知识点只是《Java完美经典》读书笔记中的一部分,完整的笔记还包括对这些概念的深入探讨,例如设计模式、并发编程、数据库操作、XML处理等。通过阅读并实践这些笔记,Java开发者能够不断巩固和提高自己的编程...

    eclipse性能优化 <深度理解jvm>读书笔记

    《Eclipse性能优化——&lt;深度理解JVM&gt;读书笔记》主要涵盖了如何利用Eclipse IDE进行Java应用程序的性能优化,以及深入理解JVM的工作原理。在本文中,我们将探讨Eclipse的性能调优策略,以及JVM内存管理和垃圾回收机制...

    数据结构与算法分析 Java语言描述 读书笔记

    数据结构与算法分析是...这篇读书笔记不仅涵盖了理论知识,还结合Java语言特点进行了深入的探讨,对学习者来说是一份宝贵的资源。通过阅读和实践,开发者可以更好地理解和运用数据结构与算法,提升自己的编程技能。

    java学习笔记markdown

    【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...

    狂神说JAVA的所有笔记.zip

    同时,可能会涵盖JVM(Java虚拟机)的工作原理,包括内存管理、类加载机制、性能优化等方面,这对于理解和优化JAVA程序的运行效率极其重要。 最后,笔记还可能包含了实际项目开发中的经验分享,如MVC框架Spring的...

    java版飞机大战源码-java-performance:Java系统性能优化实战

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

    Java学习笔记(必看经典)

    12. **JVM(Java虚拟机)**:了解JVM的工作原理,如类加载、内存管理、垃圾回收等,对于优化Java程序性能至关重要。 13. **单元测试与调试**:使用JUnit等工具进行代码测试,以及如何使用IDE的调试功能来定位和修复...

    Java 学成在线笔记

    10. **JVM原理**:虚拟机的工作原理,内存模型,垃圾收集机制,以及性能优化的相关知识。 11. **设计模式**:常见设计模式的介绍,如单例模式、工厂模式、观察者模式等,以及在实际项目中的应用。 12. **Java EE**...

    java学习资料/笔记整理(一)

    本文将深入探讨“java学习资料/笔记整理(一)”中涉及的重要知识点,包括Java编程思想、类型协变、查询手册以及数据结构与算法。 首先,Java编程思想是理解Java核心概念的关键。这通常涉及到面向对象编程(OOP)...

    Java 疑难杂症_笔记.zip

    第五,JVM性能优化是Java开发者必须掌握的技能。笔记可能包括JVM的运行模式、类加载机制、方法区、类的生命周期,以及如何通过JProfiler、VisualVM等工具进行性能监控和调优。 第六,笔记可能还涉及到了Java网络...

    JAVA学习笔记 林信良

    在内存管理和垃圾回收方面,书中有专门章节讲解Java的内存模型以及自动内存管理机制,解释了如何避免内存泄漏和理解引用类型,这对于优化程序性能和解决内存问题非常有帮助。 书中还详细阐述了异常处理,这是Java...

    Corejava 核心java笔记

    这些知识点构成了Java编程的基础,通过阅读和整理"Corejava 核心java笔记",初学者可以系统地学习和巩固Java的核心概念,逐步成长为一名合格的Java开发者。记得理论结合实践,不断编写代码,才能更好地消化和吸收...

Global site tag (gtag.js) - Google Analytics