软件构造-实验总结5-Lab5

软件构造-实验总结5-Lab5

实验内容

本次实验通过对 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) 代码“看起来很美”和“运行起来很美”,二者之间有何必然的联系或冲突?哪个比另一个更重要些吗?在有限的编程时间里,你更倾向于把精力放在哪个上?
不怎么相关
(2) 诸如SpotBugs和CheckStyle这样的代码静态分析工具,会提示你的代码里有无数不符合规范或有潜在bug的地方,结合你在本次实验中的体会,你认为它们是否会真的帮助你改善代码质量?
会,可读性更好,结构更清晰
(3) 为什么Java提供了这么多种I/O的实现方式?从Java自身的发展路线上看,这其实也体现了JDK自身代码的逐渐优化过程。你是否能够梳理清楚Java I/O的逐步优化和扩展的过程,并能够搞清楚每种I/O技术最适合的应用场景?
Java的IO类逻辑关系较为复杂,虽然目前不能完全搞清楚,但是经过本次实验,我也发现了几种IO方法是较为实用且效率较高的
(4) JVM的内存管理机制,与你在《计算机系统》课程里所学的内存管理基本原理相比,有何差异?有何新意?你认为它是否足够好?
VM的管理策略更加灵活,可以动态扩展,自定义各种参数以及垃圾回收的方式。相比C语言的内存管理,Java的内存管理更好
(5) JVM自动进行垃圾回收,从而避免了程序员手工进行垃圾回收的麻烦(例如在C++中)。你怎么看待这两种垃圾回收机制?你认为JVM目前所采用的这些垃圾回收机制还有改进的空间吗?
JVM自动进行垃圾回收减少了程序员的工作,能够解决程序员粗心或工程量巨大时垃圾回收问题。我倾向于自动回收垃圾,毕竟节省了很多重复性工作。不确定。

(6) 基于你在实验中的体会,你认为“通过配置JVM内存分配和GC参数来提高程序运行性能”是否有足够的回报?
本次实验中在配置JVM内存分配和GC参数提高了很多的运行性能,这还是很有必要的。

(7) 通过Memory Dump进行程序性能的分析,JMC/JFR、VisualVM和MAT这几个工具提供了很强大的分析功能。你是否已经体验到了使用它们发现程序热点以进行程序性能优化的好处?
利用以上工具可以对程序运行中各项关键数据监控,这有助于我针对特定项进行优化
(8) 使用各种代码调优技术进行性能优化,考验的是程序员的细心,依赖的是程序员日积月累的编程中养成的“对性能的敏感程度”。你是否有足够的耐心,从每一条语句、每一个类做起,“积跬步,以至千里”,一点一点累积出整体性能的较大提升?
可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值