《Java程序性能优化》学习笔记 设计优化

第一章 Java性能调优概述

1.性能的参考指标

  执行时间:

  CPU时间:

  内存分配:

  磁盘吞吐量:

  网络吞吐量:

  响应时间:

2.木桶定律

  系统的最终性能取决于系统中性能表现最差的组件,例如window系统内置的评分就是选取最低分。可能成为系统瓶颈的计算资源如,磁盘I/O,异常,数据库,锁竞争,内存等。

  性能优化的几个方面,如设计优化,Java程序优化,并行程序开发及优化,JVM调优,Java性能调优工具的使用等。

3.Amdahl定律

  加速比=优化前系统耗时/优化后系统耗时,加速比越高,表明优化效果越好。

  单纯增加处理器数量对提升系统性能意义不大,必须同时提高程序的并行化比重。

 

第二章 设计优化

2.2 常用优化组件和方法
1.缓冲Buffer

缓冲最常用的场景就是提高I/O的速度。JDK很多IO组件都提供了缓冲功能。
如:

//Writer writer=new FileWriter(new File("file.txt"));
Writer writer=new BufferedWriter(new FileWriter(new File("file.txt")),2000);
//包装过后效率大概相差接近一倍
long begin=System.currentTimeMillis();
for(int i=0;i<10000;i++){
writer.write(i);
}
writer.close();
System.out.print("Spend:"+(System.currentTimeMillis()-begin));

BufferedWriter对象拥有两个构造函数:
public BufferedWriter(Writer out);
public BufferedWriter(Writer out,int sz);
第一个将默认构造大小为8K的缓冲区,第二个允许在应用层指定缓冲区的大小。
缓冲区不宜过大,也不宜过小。
同样,BufferedOutputStream可以包装所有的OutputStream,为其提供缓冲功能,提高输出流的效率。

缓冲区对任何一种上下层组件存在性能差异的场合都可以起到很好的效果,典型的例子是,
使用缓冲区提升动画显示效果。
2.缓存
缓存也是一块为提升系统性能而开辟的内存空间,暂存数据处理结果,并提供下次访问使用。
目前有许多优秀的缓存工具可供使用。
3.对象复用——“池”
对象池化,核心思想是,如果一个类被频繁的请求使用,不必每次都生成一个实例,可以保存在“池”中,需要时直接获取。
典型的如线程池和数据库连接池。
4.并行替代串行
5.负载均衡
负载均衡的典型实现是Tomcat集群,配置Tomcat集群实现负载均衡,可以通过Apache服务器实现。即使用Apache服务器作为负载分配器,将请求转向各个Tomcat服务器。
两种基本的Session共享模式。黏性Session模式和复制Session模式。
黏性Session模式下,所有的Session信息被平均分配到各个Tomcat节点上,但是节点宕机,其所维护的session信息将丢失,不具备高可用性,同一个用户只能与一台Tomcat交互。
复制session,使得所有session在所有Tomcat节点上保持一致。一个节点的session被修改,会被广播到其他节点上,保持同步。

时间: 2024-09-03 07:26:49

《Java程序性能优化》学习笔记 设计优化的相关文章

java 程序性能优化《第二章》设计优化 2.1善用设计模式 1 单例模式

java 程序性能优化<第二章>设计优化 2.1善用设计模式 1 单例模式 设计模式是前人工作的总结和提炼.通常,被人们广泛流传的设计模式都是对某一特定问题的成熟的解决方案.如果能合理的使用设计模式,不仅能使系统更容易被他人理解,同时也能使系统拥有更加合理的结构.本节总结归纳了一些经典的设计模式,并详细说明它们与软件性能之间的关系. 2.1.1 单例模式 单例模式是设计模式中使用最为普遍的模式之一.它是一种对象创建模式,用于生产一个对象的具体实现,它可以确保系统中一个类只产生一个实例.在Jav

java 程序性能优化《第二章》设计优化 2.1善用设计模式 2 代理模式

java 程序性能优化<第二章>设计优化 2.1善用设计模式 2 代理模式 代理模式也是一种很常见的设计模式.它使用代理对象完成用户请求,屏蔽用户对真实对象的访问.就如同现实中的代理一样,代理人被授权执行当事人的一些适宜,而无需当事人出面,从第三方的角度看,似乎当事人并不存在,因为他只和代理人通信.而事实上,代理人是要有当事人的授权,并且在核心问题上还需要请示当事人. 在现实中,使用代理的情况很普遍,而且原因也很多.比如,当事人因为某些隐私不方便出面,或者当事人不具备某些相关的专业技能,而需要

Java程序性能优化(辛苦了几个小时,还经历了一次停电,我真是命苦!)

程序|性能|优化 Java程序性能优化 一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子:import java.util.Vector;class CEL {    void method (Vector vector) {        for (int i = 0; i < vector.size (); i++)  // Violation            ; //

Java 程序性能优化《第一章》Java性能调优概述 1.4小结

Java 程序性能优化<第一章>1.4小结 通过本章的学习,读者应该了解性能的基本概念及其常用的参考指标.此外,本章还较为详细的介绍了与性能调优相关的两个重要理论--木桶原理以及Amdahl定律. 根据木桶原理,系统的最终性能总是由系统中性能最差的组件决定的.因此,改善该组件的性能对提升系统整体性能有重要的作用.而根据Amdahl定律,可以知道只是增加处理器数量对提升系统性能并没有太大的实际意义,必须同时提高程序的并行化比重. 本章还简要的介绍了在软件开发和维护过程中可以进行性能优化的各个阶段

Java 程序性能优化《第一章》Java性能调优概述 1.2性能调优的层次

Java 程序性能优化<第一章>1.2性能调优的层次 为了提升系统性能,开发人员开始从系统各个角度和层次对系统进行优化.除了最常见的代码优化外,在软件架构上.JVM虚拟机层.数据库以及操作系统层面都可以通过各种手段进行优化,从而在整体上提升系统的性能. 1.2.1 设计调优 设计调优处于所有调优手段的上层,它往往需要在软件开发之前进行.在软件开发之处,软件架构师就应该评估系统可能存在的各种潜在问题,并给出合理的设计方案.由于软件设计和架构对整体质量有决定性的影响,所以,设计调优对系统性能的影响

Java 程序性能优化《第一章》Java性能调优概述 1.3基本调优策略和手段

Java 程序性能优化<第一章>1.3基本调优策略和手段 存在性能问题的系统,十之八九是由于某一系统瓶颈导致的.只要找到该性能瓶颈,分析瓶颈的形成原因,对症下药,使用合理的方法解决系统瓶颈,就能从根本上提升性能.所以,系统性能优化的最主要目的就是查找并解决性能瓶颈问题.但同时值得注意的是,性能优化往往会涉及对原有的实现进行较大的修改,因此,很难保证这些修改不引入新的问题.所以,在性能优化前,需要对性能优化的目标.方法进行统筹的安排. 1.3.1 优化的一般步骤 对软件系统进行优化,首先需要有明

Java 程序性能优化《第一章》Java性能调优概述 1.1性能概述

Java 程序性能调优<第一章>Java性能调优概述(1.1性能概述) 1.1 性能概述 为什么程序总是那么慢?它现在到底在干什么?时间都花在哪里了?也许,你经常会抱怨这些问题,如果是这样,那说明你的程序出了性能问题.和功能问题相比,性能问题在有些情况下,可能不算什么大问题,将就将就,也就过去了.但是严重的性能问题会导致程序瘫痪.假死.直至崩溃.本书就先来认识性能的各种表现和指标. 1.1.1 看懂程序的性能 对客户端程序而言,拙劣的性能会严重影响用户体验,界面停顿.抖动.响应迟钝等问题会遭到

智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )

原文:智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 ) SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句   SQL Optimizer for SQL Server 让 SQL Server DBA或者T-SQL开发人员能够主动地识别潜在的SQL性能问题,通过扫描和分析SQL语句进行人工智能自动SQL优化.Dell SQL Opt

Java程序性能优化

一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util.vector; class cel { void method (vector vector) { for (int i = 0; i < vector.size (); i++) // violation ; // ... } } 更正: class cel_fixed { void metho