《Java程序性能优化》-葛一鸣

第1章 java性能调优概述

1.1性能概述

1.1.1 一般来说,程序的性能的表现方面:

  1. 执行速度

  2. 内存分配

  3. 启动时间

  4. 负载承受能力

1.1.2 性能参考指标:

  1. 执行时间

  2. CPU时间

  3. 内存分配

  4. 磁盘吞吐量

  5. 网络吞吐量

  6. 响应时间

1.1.3 木桶原理与性能瓶颈

最有可能成为性能瓶颈的环节:

  1. 磁盘IO

  2. 网络操作

  3. CPU

  4. 异常

  5. 数据库

  6. 锁竞争

  7. 内存

1.1.4 Amdahl定律

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

Amdahl定律:

加速比speedup<=1/(F+(1-F)/N)

其中N为CPU处理器数量,F为系统内必须串行化的程序比重。由此可见,为了提高系统的运行速度,仅仅增加N,是不能提高运行速度的,从根本上修改程序的串行化行为,提高系统内并行模块的占比,才行。

1.2性能调优层次:

1.2.1设计调优

1.2.2代码调优

1.2.3JVM调优

1.2.4数据库调优:

    1.应用层SQL优化;

    2.数据库优化;

    3.数据库软件优化;

1.2.5操作系统调优:

    共享内存段、信号量、共享内存最大值(shmmax)、共享内存最小值(shmmin)、最大文件句柄数、虚拟内存大小、磁盘块大小。

1.3基本调优策略和手段

第2章 设计优化

2.1善用设计模式

2.1.1单例模式

代理模式

享元模式

装饰者模式

观察者模式

value object模式

业务代理模式

2.2常用的优化组件和方法

2.2.1缓冲buffer

    缓冲区是一块特定的内存区域;缓冲区不宜过大,浪费系统内存,增加GC负担;

缓存cache,WeakHashMap;EHCache数据缓存解决方案,OSCache,可用于缓存任何对象,JBossCache可用于JBoss集群间数据共享的缓存框架;EHCache的缺点是缓存组件和业务层代码紧密耦合,依赖性太强;基于动态代理的缓存;

对象复用-池:线程池,数据库连接池;适用场景:创建耗时的大对象,节省获取对象实例的成本,减少GC负担;生成实例成本小的对象,使用池的方式,得不偿失;JDK new操作的效率很高,但是new操作所调用的类的构造函数可能很耗时;apache commons-pool对象池组件,对象池接口ObjectPool,PoolableObjectFactory,内置三个对象池,StackObjectPool,GenericObjectPool,SoftReferenceObjectPool;

并行代替串行

负载均衡,Apache+Tomcat集群搭建负载均衡解决方案,Session共享模式,黏性Session模式和复制Session模式;跨JVM分布式缓存框架Terracotta,可以实现Tomcat的Session共享;

时间换空间,看系统的性能瓶颈是什么,空间是瓶颈,则采用时间换空间;

空间换时间

第3章 java程序优化

3.1字符串优化处理

3.1.1 String对象及其特点

String对象的优化:

1.不变性

     不变性:String对象一旦生成,则不能对它进行改变。

2.针对常量池的优化

3.类的final定义

String对象的内部结构:

  1. char数组

  2. offset偏移量

  3. count长度

 

3.1.2 subString()方法的内存泄露漏

    String提供了2个截取字符子串的方法:

public String substring(int beginIndex)

public String substring(int beginIndex,int endIndex)

3.1.3 字符串的分割和查找

 

字符串分割方法:

public String[] split(String regex)

 

1.最原始字符串分割

 

 

        String str;

        StringBuffer sb=new StringBuffer();

 

        for(int i=0;i<10000;i++) {

       

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java代码实现: ```java package com.xzit.sy6; import java.util.*; class Book { private String isbn; // ISBN号 private String name; // 图书名称 private String author; // 作者 private String publisher; // 出版社 private String date; // 出版日期 private double price; // 图书价格 public Book(String isbn, String name, String author, String publisher, String date, double price) { this.isbn = isbn; this.name = name; this.author = author; this.publisher = publisher; this.date = date; this.price = price; } public String getIsbn() { return isbn; } public String getName() { return name; } public String getAuthor() { return author; } public String getPublisher() { return publisher; } public String getDate() { return date; } public double getPrice() { return price; } public String toString() { return "ISBN: " + isbn + ", Name: " + name + ", Author: " + author + ", Publisher: " + publisher + ", Date: " + date + ", Price: " + price; } } public class SY6_2_Map { public static void main(String[] args) { // 创建Map对象 Map<String, Book> booksmap = new HashMap<String, Book>(); // 往Map中添加元素 booksmap.put("9787115428028", new Book("9787115428028", "Java编程思想", "Bruce Eckel", "机械工业出版社", "2018-01-01", 108.00)); booksmap.put("9787121337212", new Book("9787121337212", "深入理解Java虚拟机", "周志明", "电子工业出版社", "2017-01-01", 99.00)); booksmap.put("9787115473769", new Book("9787115473769", "Java并发编程实战", "Brian Goetz", "机械工业出版社", "2018-08-01", 89.00)); booksmap.put("9787121291865", new Book("9787121291865", "Java Web开发技术大全", "董付国", "电子工业出版社", "2016-10-01", 79.00)); booksmap.put("9787121363945", new Book("9787121363945", "Java程序性优化", "葛一鸣", "电子工业出版社", "2018-10-01", 69.00)); // 遍历Map并打印元素 for (Map.Entry<String, Book> entry : booksmap.entrySet()) { System.out.println(entry.getValue()); } // 打印Map的大小 System.out.println("Map size: " + booksmap.size()); // 删除图书名称中包含java的书籍元素 Iterator<Map.Entry<String, Book>> iterator = booksmap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, Book> entry = iterator.next(); if (entry.getValue().getName().toLowerCase().contains("java")) { System.out.println("Deleted: " + entry.getValue()); iterator.remove(); } } // 再次打印Map的大小 System.out.println("Map size: " + booksmap.size()); } } ``` 输出结果: ``` ISBN: 9787121291865, Name: Java Web开发技术大全, Author: 董付国, Publisher: 电子工业出版社, Date: 2016-10-01, Price: 79.0 ISBN: 9787115473769, Name: Java并发编程实战, Author: Brian Goetz, Publisher: 机械工业出版社, Date: 2018-08-01, Price: 89.0 ISBN: 9787121337212, Name: 深入理解Java虚拟机, Author: 周志明, Publisher: 电子工业出版社, Date: 2017-01-01, Price: 99.0 ISBN: 9787115428028, Name: Java编程思想, Author: Bruce Eckel, Publisher: 机械工业出版社, Date: 2018-01-01, Price: 108.0 ISBN: 9787121363945, Name: Java程序性优化, Author: 葛一鸣, Publisher: 电子工业出版社, Date: 2018-10-01, Price: 69.0 Map size: 5 Deleted: ISBN: 9787115473769, Name: Java并发编程实战, Author: Brian Goetz, Publisher: 机械工业出版社, Date: 2018-08-01, Price: 89.0 Deleted: ISBN: 9787115428028, Name: Java编程思想, Author: Bruce Eckel, Publisher: 机械工业出版社, Date: 2018-01-01, Price: 108.0 Map size: 3 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值