[软件构造]实验回顾:Lab5

实验目标:Static and Dynamic Code Analysis and Performance Optimization

本次实验通过对Lab4的代码进行静态和动态分析,发现代码中存在的不符合代码规范的地方、具有潜在bug的地方、性能存在缺陷的地方(执行时间热点、内存消耗大的语句、函数、类),进而使用第4、7、8章所学的知识对这些问题加以改进,掌握代码持续优化的方法,让代码既“看起来很美”,又“运行起来很美”。
具体训练的技术包括:
⚫ 静态代码分析(CheckStyle和SpotBugs)
⚫ 动态代码分析(Java命令行工具jstat、jmap、jcmd、VisualVM、JMC、JConsole等)
⚫ JVM内存管理与垃圾回收(GC)的优化配置
⚫ 运行时内存导出(memory dump)及其分析(Java命令行工具jhat、MAT)
⚫ 运行时调用栈及其分析(Java命令行工具jstack);
⚫ 高性能I/O
⚫ 基于设计模式的代码调优
⚫ 代码重构

个人觉得,本次实验的内容很无聊,因为这些分析都是通过工具完成,自己没什么可以创造的空间。

第一部分:静态代码分析

对于CheckStyle,我的评价不高,感觉他没什么用:只是给你一个标准,让你去格式化代码,去符合他自己给定的标准。但是话说回来,良好的代码风格确实能增加可读性,是一种好的编程习惯。
1.Checkstyle:import不要使用星号格式,而且要按字典序排列
解决方法:在Eclipse中应用一个Google的代码标准

在这里插入图片描述
2. Checkstyle:for,if结构都必须加上大括号
在这里插入图片描述
3.CheckStyle:'STATIC_INIT 前应有空行。
在这里插入图片描述

第二部分:性能优化

这里就是多种I/O方式之间的比较,比较结果就是“长江后浪推前浪”,Buffer和Writer/Scanner总是要优于Stream。

第三部分:垃圾收集

这部分也很无聊,就是用各种工具分析程序执行过程中对于垃圾回收的情况。但是通过内存到处还是能很清楚地看到程序的内存使用情况的。

第四部分:使用设计模式

这部分也是,设计模式用了很多,程序效率没什么提高。
1.用Flyweight设计模式设计的电子类:
在这里插入图片描述
工厂方法:
在这里插入图片描述
2. 基于Prototype 设计模式的思想改造程序,支持clone :以Track为例
在这里插入图片描述

  1. 对程序中使用的各种临时性的集合类或其他构造代价高的对象,使用Singleton 和Object Pool 设计模式的思想进行改造;
package physicalObject;

import track.Track;

public class ElectronFactory {

  private static ElectronFactory factory;

  public static ElectronFactory getFactory() {
    if (factory == null)
      factory = new ElectronFactory();
    return factory;
  }

  public List<MyObject> get(MyObject e, Track t) {
    List<MyObject> l = new ArrayList<>();
    l.addobject(e);
    return l;
  }

}
  1. 对程序中使用的各种简单对象,使用canonicalization 的思想对其进行改造,降低构造对象的数量;

修改前:

  private final double radius;
  private final String form;
  private final double speed;
  private final String direction;
  private final String color;

修改后:

  private final double radius;
  private final int form;
  private final double speed;
  private final boolean direction;
  private final String color; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值