设为首页 加入收藏

TOP

Java 程序优化 (读书笔记)(一)
2017-10-13 10:40:36 】 浏览:6179
Tags:Java 程序 优化 读书 笔记

--From : JAVA程序性能优化 (葛一鸣,清华大学出版社,2012/10第一版)

 

1. java性能调优概述

    1.1 性能概述 

        程序性能: 执行速度,内存分配,启动时间, 负载承受能力。

        性能指标: 执行时间,CPU时间,内存分配,磁盘吞吐量,网络吞吐量,响应时间。 

        优化策略: 木桶原理,优化性能瓶颈。

    1.2 性能调优的层次

        设计调优,

        代码调优,

        JVM调优,

        数据库调优,

        操作系统调优。

        

2. 设计优化

    2.1 善用设计模式 

        单例模式: 对于巨大对象,节省创建对象的时间空间;

        代理模式: 可用于延迟加载,提升系统启动速度;

        享元模式: 对象和组件复用,节省创建对象的开销;

        装饰者模式: 分离组件,提高可维护性增加模块复用性;

        观察者模式: 避免新开线程循环等待;

    2.2 常用组件优化

        缓冲(漏斗设计), 

        缓存(空间换时间), 

        对象复用“池”, 

        并行代替串行,

        负载均衡(Terracotta), 

        时间换空间,

        空间换时间。

        

3. Java程序优化

    3.1 字符串 

        不变性, 针对常量池优化

        subString 空间换取时间

        split 正则分割

        StringTokenizer 字符串分割

        灵活使用charAt 和 indexOf

        StringBuffer(线程安全) 和 StringBuilder : 初始化时设置最大容量

    3.2 核心数据结构

        List : ArrayList 和  LinkedList

        Map  : Hashtable(线程安全), HashMap, LinkedHashMap, TreeMap(可排序)

        Set  : hashSet, linkedHashSet, TreeSet

        集合访问优化 :

            分离循环中被重复调用的代码 ( i<collection.size() -> i<collectionSize )

            省略相同的操作 (循环内部的声明)

            减少方法调用 (优先直接访问内部变量)

        RandomAccess (随即访问): ArrayList Vector

    3.3 使用NIO提升性能

        NIO的Buffer 和 Channel 配合使用

        Buffer的原理和相关操作

        Buffer内存缓存和堆上内存区别

    3.4 引用类型

        强引用 : 可以直接访问,不会被GC回收,可能导致内存泄露(互相引用)

        软引用 : SoftReference<T> 内存紧张,会被GC回收

        弱引用 : WeakReference<T> GC发现立即回收

        虚引用 : PhantomReference<T> 始终返回null

        WeakHashMap : 弱引用的 HashMap

    3.5 改善性能

        慎用异常,try catch浪费性能 (62ms/110ms)

        使用局部变量,栈的访问比堆快 (78ms/266ms)

        位运算代替乘除法            (31ms/219ms)

        一维数组代替二维数组        (235ms/344ms)

        提取公共表达式

        降低循环次数 如数组赋值 i++ -> i+=3 (31ms/94ms)

        布尔运算代替位运算 (逻辑运算中布尔运算快于位运算,越简单的越靠前)

        使用System.arrayCopy()(native 函数)复制数组(31ms/250ms)

        Buffer进行I/O操作

        使用clone()代替new (一般是浅拷贝,其他需要具体实现clone)

        静态方法代替实例方法

        

4. 并行程序开发及优化

&nb

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇PHP设计模式(八)桥接模式(Brid.. 下一篇RabbitMq应用一

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目