软件构造实验五

本次实验通过静态和动态代码分析,针对Lab4代码进行优化,涉及CheckStyle、SpotBugs工具,JVM内存管理和GC优化,以及多种I/O方式的性能对比。实验过程中,对代码规范、内存使用、I/O效率、垃圾回收等方面进行了改进,通过重构和设计模式提升了代码性能。实验结果显示,优化后的系统在构建和运行时表现出显著提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 实验目标概述

本次实验通过对 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

⚫ 基于设计模式的代码调优

⚫ 代码重构

  1. 实验环境配置

VisualVM安装较麻烦一些,首先进入官网下载eclipse相应插件,解压到根目录,在eclipse下help下面的安装新的软件,选择解压好的文件,一路默认即可。安装完成后要在配置: 在window的preferences中进行VisualVM的配置,需要配置它的启动器(jdk、bin目录下面的jvisualvm.exe)还有jdk目录(注意是jdk不是jre)点击apply,ok即可完成安装配置

MAT和CheckStyle直接在marketPlace搜索傻瓜式安装即可,(注意Checkstyle的C大写,s小写要不然搜不到。。。。。。)

SpotBugs在lab4已经安装

在这里给出你的GitHub Lab5仓库的URL地址(Lab5-学号)。

https://github.com/ComputerScienceHIT/Lab5-1170300527.git

  1. 实验过程

请仔细对照实验手册,针对每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。

    1. Static Program Analysis
      1. 人工代码走查(walkthrough)

1.Switch和case,自动format时没有缩进,Google要求有缩进,手动调整

2.要求每个函数都有doc,构造方法等之前没有添加,此次添加

3.缩进要求两个,以前都是4个,更改java->Code Style->format中设置

4.Google中不能使用tab要使用空格,更改Text Editor设置,format设置

勾选上insert spaces tabs

选择space only,tab size设为2

      1. 使用CheckStyle和SpotBugs进行静态代码分析
  1. 类命名不符合规范,person改为Person,使用重构工具,首字母全部改为大写

  1. 包命名全部小写,在lab3中要求的包名有些不符合规范未进行修改

  1. Javadoc的第一句缺少一个结束时期。第一行加上”.”

  1. 变量名,小写字母开头,小写字母要大于两个,rename重构
  2. 方法名开头小写,不能连续两个大写字母,rename重构
  3. 顶级类在自己源文件中,新建class

  1. 导入包按的字典顺序

  1. 分开定义

  1. 字符过多,换行

  1. If的{},自动生成的equal也要改…………

  1. 等等等
    1. Java I/O Optimization
      1. 多种I/O实现方式

实现了Reader/Writer ,Buffer/Channel, java.nio.file.Files三种I/O方式,

Reader/Writer使用的bufferreader和bufferwrite,较为简单,直接调用其中的read和write方法即可

Buffer/Channel读取文件时使用MappedByteBuffer RandomAccessFile的内存映射,读入速度较其他方法快了很多倍,但读入的并非string,将其转化为string后就慢了很多,基本和bufferread差不多,写文件采用的bytebuffer

java.nio.file.Files方法也较为简单,直接调用readAllline和write即可将数据直接全部写入

使用strategy设计模式,创建接口readandwrite,包含read和write接口,

创建三个类以三种I/O策略实现接口,ReadWrite,Channel,NioFile分别实现Reader/Writer ,Buffer/Channel, java.nio.file.Files,这里只进行读取与写入,未进行处理,处理仍然交给三个系统分别处理,否则三个系统的匹配,写入格式都不同,将需要创建九个类.

在三个系统中创建策略对象,这样可以通过传入的策略以不同的I/O处理文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值