1、Java性能调优概述

  1.1、Web服务器,响应时间吞吐量是两个重要的性能参数。

  1.2、程序性能的几个表现:

    • 执行速度:程序的反映是否迅速,响应时间是否足够短
    • 内存分配:分配是否合理,是否过多地消耗内存或泄露
    • 启动时间:程序从运行到可以正常处理业务需要花费多长时间
    • 负载承受能力:当系统压力上升时,系统的执行速度、响应时间的上升曲线是否平缓

  1.3、木桶原理与性能瓶颈

    根据木桶原理,系统的最终性能取决于系统中性能表现最差的组件。

    有可能成为系统瓶颈的计算资源:

      磁盘I/O:

      网络操作:

      CPU:

      异常:

      数据库:

      锁竞争:

      内存:

  1.4、Amdahl定律

    加速比=优化前系统耗时/优化后系统耗时

    设加速比为Speedup,必须串行化的程序比重为F,CPU处理器数量为N,则有:

    

    为了提高系统的速度,仅增加CPU处理器的数量并不一定能起到有效的作用,需要从根本上修改程序的串行行为,提高系统内可并行化的模块比重,在此基础上,合理增加并行处理器数量,才能以最小的投入,得到最大的加速比。

  1.5 性能调优的层次

    设计调优:软件开发之前;所有调优手段的最上层,对软件整体质量有决定性的影响。可以规避某一个组件的性能问题,而非改良该组件的实现。(需要熟悉:常用软件设计方法、设计模式、基本性能组件、常用优化思想)

    代码调优:开发过程中或开发完成后;从微观上对性能的调整,是产生最直接影响的优化方法。熟悉相关的API,对算法、数据结构的灵活使用。

    JVM调优:开发后期;对JVM的运行原理和基本内存结构有一定了解,然后根据程序特点,设置合理的JVM启动参数。

    数据库调优:分为3个部分

      应用层对SQL语句优化:编程技巧,指定列名避免使用*、使用PreparedStatement代替Statement等

      数据库进行优化:冗余字段、水平切割、索引等

      数据库软件进行优化:以Oracle为例,合理的共享池、缓存缓冲区或者PGA等

    操作系统调优:linux,共享内存段、共享内存最大值、最小值、虚拟内存大小、磁盘的块大小等;wiindows,虚拟内存等

  1.6基本调优策略和手段

    优化的一般步骤:首先明确性能目标,指出优化的对象和最终目的。其次,在目标平台对软件进行测试,通过各种性能监控和统计工具,观测和确认当前系统是否已经达到相关目标,若已经达到,则不再优化;若未达到,则需要查找当前的性能瓶颈。

    注意事项:不能为了优化而优化,需要进行慎重的评估。

2、设计优化

  2.1、设计模式

    2.1.1 单例模式

      频繁使用的对象,可以省略创建对象所花费的时间。

      由于new操作的次数减少,对系统内存的使用频率也会降低,减轻GC压力,缩短GC停顿时间。

      延迟加载、多线程环境(内部类):

public class StaticSingleton{
private StaticSingleton(){
System.out.println("create");
}
private static class SingletonHolder{
private static StaticSingleton instance = new StaticSingleton();
} public static StaticSingleton getInstance(){
return SingletonHolder.instance;
}
}

      反射机制,强行调用单例类的私有构造函数,生成多个单例。

      程序的序列化和反序列化可能会破坏单例。

    2.1.2 代理模式

      原因:安全方面,屏蔽客户端直接访问真实对象;提升系统性能,对真实对象封装,从而达到延迟加载;远程调用中,处理远程方法调用的技术细节。

      动态代理:使用字节码动态生成加载技术,在运行时生成加载类。

       方式:JDK自带的动态代理、CGLIBJavassist或者ASM库。  

    2.1.3 享元模式

      目的:提高系统性能,复用大对象,节省内存空间和对象创建时间

      核心思想:在一个系统中存在多个相同的对象,那么只需共享一份对象的拷贝,而不必为每一次使用都创建新的对象。

      几个概念:享元工厂、抽象享元、具体享元类、Main

      SAAS、租户

      享元模式和对象池:享元对象不可相互替代,对象池中的对象都是等价的。

        

    

    

Java程序性能优化——让你的java程序更快、更稳定的更多相关文章

  1. 《Java程序性能优化:让你的Java程序更快、更稳定》

    Java程序性能优化:让你的Java程序更快.更稳定, 卓越网更便宜,不错的书吧

  2. 笔记《Java程序性能优化 让你的Java程序更快、更稳定》 第二章 设计调优

    2.1 善用设计模式 23 (1) 1. 设计模式好处: 2.1.1 单例模式 23 (6) 1. 单例模式是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例: 2. ...

  3. Java程序性能优化技巧

    Java程序性能优化技巧 多线程.集合.网络编程.内存优化.缓冲..spring.设计模式.软件工程.编程思想 1.生成对象时,合理分配空间和大小new ArrayList(100); 2.优化for ...

  4. [JAVA] java程序性能优化

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

  5. Java程序性能优化读书笔记(一):Java性能调优概述

    程序性能的主要表现点: 执行速度:程序的反映是否迅速,响应时间是否足够短 内存分配:内存分配是否合理,是否过多地消耗内存或者存在内存泄漏 启动时间:程序从运行到可以正常处理业务需要花费多少时间 负载承 ...

  6. Java程序性能优化之性能概述

    性能的基本概念 一).什么叫程序的性能? 程序运行所需的内存和时间. 二).性能的表现形式: 1).执行速度: 程序的反应是否迅速,响应时间是否足够短. 2).启动时间:程序从运行到可以处理正常业务所 ...

  7. Java的性能优化

    http://www.toutiao.com/i6368345864624144897/?tt_from=mobile_qq&utm_campaign=client_share&app ...

  8. Java GC 专家系列5:Java应用性能优化的原则

    本文是GC专家系列中的第五篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.所以,你应该已经了解了JDK 7中的5种GC类型,以及每种GC ...

  9. 从虚拟机视角谈 Java 应用性能优化

    从虚拟机视角谈 Java 应用性能优化 周 祥, 软件工程师, IBM 简介:Java 的普及和广泛应用,以及其基于虚拟机运行的机制,使得性能问题越来越重要.本文从 Java 虚拟机的角度,特别是垃圾 ...

随机推荐

  1. serviceStack.Redis 在PooledRedisClientManager 中设置密码

    ServiceStack.Redis 是一个C#访问Redis的客户端,可以说可以通过它实现所有需要Redis-Cli的功能.但是今天我在主Redis 实例设置了访问密码,而在slave 上没有设置, ...

  2. 从 AJAX 到 JSONP的基础学习

    目录索引: 一.AJAX的概念二.POST && GET三.原生实现AJAX简单示例 3.1 实现代码 3.2 重点说明四.框架隐藏域 4.1 基本概念 4.2 后台写入脚本 4.3 ...

  3. LINQ to SQL语句(11)之Update

    说明:更新操作,先获取对象,进行修改操作之后,直接调用SubmitChanges()方法即可提交.注意,这里是在同一个DataContext中,对于不同的DataContex看下面的讲解. 1.简单形 ...

  4. [Bug]2016-02

    1.0 反序列化时的对象属性类型定义错误. 字符串类型用整型接收.(导致一直反序列化失败.) 2.0 HttpWebRequest myReq = (HttpWebRequest)HttpWebReq ...

  5. Android的系统服务一览

    System_Server进程 运行在system server进程中的服务比较多,这是整个Android框架的基础 Native服务 SurfaceFlinger 这是framebuffer合成的服 ...

  6. 解决.NET WebService引用后添加HTTP Header的问题

    麻蛋,搜索了好久,找到的都是对soap header的操作,不是对WebService的HTTP Header的操作,这是两种不同的概念,平常我们发起的WebService请求走的都是http通信协议 ...

  7. 强大的HTTP包装开源项目ASIHTTPRequest介绍

    ASIHTTPRequest 是一个直接在CFNetwork上做的开源项目,提供了一个比官方更方便更强大的HTTP网络传输的封装.它的特色功能如下: 1,下载的数据直接保存到内存或文件系统里 2,提供 ...

  8. oracle实用sql之将逗号分割的字符串分割多个列

    select regexp_substr('a,b,c,','[^,]+',1,rownum) from dual connect by rownum<=length(regexp_replac ...

  9. discuz X3.1 源代码阅读,记录代码片段

    require_once libfile('function/post'); // /source/function/function_post.php require_once libfile('p ...

  10. 如何在MAC OS X下安装配置java开发工具

    简介: Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语 ...