本次实验通过对 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
⚫ 基于设计模式的代码调优
⚫ 代码重构
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
请仔细对照实验手册,针对每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。
-
- Static Program Analysis
- 人工代码走查(walkthrough)
- Static Program Analysis
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
-
-
- 使用CheckStyle和SpotBugs进行静态代码分析
-
- 类命名不符合规范,person改为Person,使用重构工具,首字母全部改为大写
- 包命名全部小写,在lab3中要求的包名有些不符合规范未进行修改
- Javadoc的第一句缺少一个结束时期。第一行加上”.”
- 变量名,小写字母开头,小写字母要大于两个,rename重构
- 方法名开头小写,不能连续两个大写字母,rename重构
- 顶级类在自己源文件中,新建class
- 导入包按的字典顺序
- 分开定义
- 字符过多,换行
- If的{},自动生成的equal也要改…………
- 等等等
- Java I/O Optimization
- 多种I/O实现方式
- Java I/O Optimization
实现了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处理文件