八个改善Java遗留系统的技巧

你没看错,就是这个题目:即使是Java系统也会变成“遗留”系统。每当我们想起遗留系统时,我们就会想起那些存储着大量文件数据并只能用COBOL访问的嘎吱嘎吱作响的大型主机。但事实是,Java已经是一门具有15年历史的开发语言,用Java写就的成千上万的系统已经成功运行了十年甚至更久。

因此,考虑到许多读者都会工作在某个遗留的Java系统上,我根据自己的经验特地攒了这八个技巧,来帮助团队更新和激活他们的遗留Java应用。

技巧1:使用分析器

分析器提供了任何其他工具无法提供的功能,从而能够深入检查你的应用。如果你的应用已经有一年多时间没有被分析过了,那么它肯定会有大块大块的低效代码,潜伏在某个黑暗的角落。市面上有许多不同的或免费或商业的分析器。对于CPU分析,我最喜欢的是JProfiler,因为它足够强大能分析出大多数问题,同时易于设置,尤其当你使用它内建的设置向导的时候。而诊断内存问题时,我最亲睐的工具是Eclipse Memory Analyzer,因为它使用的是记录在磁盘上的索引,而不是把整个堆的快照放到内存中。

通常来说,隐藏着的易耗尽CPU的代码包括低效的hashCode()或者equals()方法(在卷动JTable时以及使用Java collection类时,它们会被调用上百万次),以及一些出人意料的出自Sun之手的低效类,比如SimpleDateFormat。

分析器可能会明显地让你的应用变得很慢,所以你一定要在测试环境中使用它。

技巧2:监控数据库使用状况

分析器除了可以显示你的应用过度占用CPU时钟的细节,它们也可以对你的应用在哪些地方长时间做了数据库的操作给出提示。但更好的用来监控数据使用的工具,是像Proactive DBA或者HP Diagnostics,或者任何其他来自于你的数据库产品厂商的工具。这些工具可以告诉你,哪些代码做了长时间的SQL调用,以及哪些代码在短时间内对同一行做了多次调用。来自数据库厂商的工具还可以帮助发现那些阻塞了其他调用的查询;虽然在我的经验里,这样的阻塞问题基本不过是些简单的、低效的SQL用法。

我写了一个新的工具叫做jdbcGrabber,它可以让你以可视化的形式描述出哪些代码正在访问哪些数据表。通过这种可视化呈现,你可以很容易发现那些多次访问数据库中不同部分信息的代码,从而将其调整为一次合并的请求。

技巧3:构建和部署自动化

许多遗留系统缺乏一种完全自动化的方式,来构建它们的代码,更不用说自动部署了。自动化构建和部署对于提高遗留系统开发者的效率来说,是一种简单直接而又低风险的方式,而且通常不需要修改代码。

没有自动化的构建和部署过程,新的开发者不得不重新发明轮子,跟那些前辈们早就斗争过的同样问题重新来斗,而且每次重复的部署问题发生,开发者都会发明出不同的解决方案。

虽然Maven是一款卓越的而且使用广泛的构建工具,但它对你的源码树结构以及库依赖有着固执的要求,所以把它用在遗留应用中会有点困难。但足够优秀的Ant应该更易于使用,因为它处理起遗留代码结构更加灵活,也更容易部分采用,而不是全盘采用。

技巧4:自动化你的操作并使用JMX

另外一种提高遗留应用的效率但不会带来修改代码的风险的方式是,改善它的运维。许多内部开发的企业系统,一般都需要大量出人意料的手把手指导和维护,即使这样是不应该的。

既有的Java功能可以通过使用JMX很容易地暴露给负责运营的人们,而不会带来负面影响。许多开发者对JMX比较熟悉是因为,他们用JMX来跟JBoss和WebLogic这样的应用服务器进行交互,但他们不清楚把JMX用在他们自己的应用中是多么方便。任何Java class都可以通过JMX暴露出来,几乎没什么负面效果,也没有什么风险。

比如,如果你的应用有一个本地的静态HashMap作为cache,你就可以通过JMX来暴露功能,从而很容易地清除那个cache。

一旦应用通过JMX暴露,运维团队或者开发者就可以以良好的方式来操作应用,无需直接访问运行着应用的机器。

技巧5:创建单元测试

一旦你对遗留系统的修改破坏了某个功能,你所面临的最大障碍之一就来到了。一些工具宣称能对代码进行反向工程,并为其创建单元测试,但我对这些工具没有太多的信心。要想有足够的信心,你的单元测试的确覆盖了你期望它们覆盖的代码,你就不得不亲自创建它们。

很幸运,为遗留代码创建单元测试并没有一开始感觉上的那样困难。我使用了Michale Feathers在Working Effectively with Legacy Code一书中讲解的“遗留代码修改算法”:

确认修改点

找出测试点

打破依赖

编写测试

修改并重构

有效使用这个算法的窍门在于第3点:打破依赖。有很多技术可以用来干这个,但其中大多数都是关于移除静态引用以及在接口和facade下隐藏外部引用和复杂代码。一旦你具有这样打破依赖的感觉了,接触遗留代码就不会是一件让你提心吊胆的事情了。

时间: 2024-08-04 11:21:37

八个改善Java遗留系统的技巧的相关文章

产品-关于java遗留系统重构的问题,请教讨论方案。

问题描述 关于java遗留系统重构的问题,请教讨论方案. 目前公司的项目已经有十多年的历史了,现在想进行重构,不知道该如何下手. 目前的实现是:所有的产品代码都在一个项目里面,分了有十几个产品,用包名进行区分, 产品代码之间相互调用有点乱,主要有三个基础产品. 现在是想把各个产品之间的代码拆分,只依赖三个基础产品.如果这样处理的话,jsp,js,css等文件该如何处理? 另外还有一些系统公用的接口重构问题:例如用户选择,目前所有产品的用户选择都用同一个,各个产品的参数过滤条件都不一样,所以写了很

二十八条改善 ASP 性能和外观的技巧 1-6(From Ms China)——七月份的文章,好像还没人转过

技巧|性能 二十八条改善 ASP 性能和外观的技巧 Len Cardinal,高级顾问,Microsoft Consulting Services George V. Reilly Microsoft IIS Performance Lead 改编自Nancy Cluts 的文章 开发人员技术工程师 Microsoft Corporation 2000 年 4 月 摘要:本文介绍优化 ASP 应用程序和 VBScript 的技巧. 引言 性能是一个特征.您必须预先设计性能,否则您以后就得重写应用

二十八条改善 ASP 性能和外观的技巧(1-7)

技巧|性能 二十八条改善 ASP 性能和外观的技巧 Len Cardinal,高级顾问,Microsoft Consulting Services George V. Reilly Microsoft IIS Performance Lead 改编自Nancy Cluts 的文章 开发人员技术工程师Microsoft Corporation 2000 年 4 月 摘要:本文介绍优化 ASP 应用程序和 VBScript 的技巧. 目录 技巧 1:将经常使用的数据缓存在 Web 服务器上 技巧 2

《JVM故障诊断指南》之2 —— 调整合适的Java堆大小的技巧

原文链接 原文作者:Byron Kiourtzoglou 翻译:梅小西(904516706) 在生产系统上决定合适的Java堆大小不是一个容易的操作.许多性能问题的发生都是由于不恰当的Java堆容量的错误调整.这部分将从介绍一些技巧作为开头,它能帮助你在当前的或者新的生产系统上决定最佳的Java堆大小.其中一些技巧对预防OutOfMemoryError问题和内存泄露方面也同样有用. 请注意这些技巧是倾向于"帮助你"决定合适的Java堆大小.因为每一个IT环境都不相同,实际上你是处于最好

遗留系统的技术栈迁移

什么是遗留系统(Legacy System)?根据维基百科的定义,遗留系统是一种旧的方法.旧的技术.旧的计算机系统或应 用程序[1].这一定义事实上并没有很好地揭露遗留系统的本质.我认为,遗留系统首先是一个还在运行和使用,但已步入 软件生命周期衰老期的软件系统.它符合所谓的"奶牛规则":奶牛逐渐衰老,最终无奶可挤:然而与此同时,饲养成本却 在上升.这意味着遗留系统会逐渐随着时间的推移,不断地增加维护成本. 维护一个软件系统,就需要了解该软件 系统的知识.若知识缺失,就意味着这会给维护人

iOS 遗留系统重构实践

在过去的几个月内,我主导着团队完成了一项工程浩大(累积八个人月的工作量)的重构工作--为我们的App替换数据库.之所以能够把这种伤筋动骨的事情称之为重构,是因为在这段时间内,我们每天向主干合并两到三次代码,期间App上线五次,用户没有感知到任何影响.在这篇文章中,我将讲述我们如何在不影响系统外部行为,也不影响正常交付的情况下,替换掉了数据库实现. 背景 在一个有着良好分层结构的系统中,每一层都有它自己的职责:显示层负责响应用户事件,调用业务层的逻辑,最后做数据呈现:业务逻辑层负责业务规则与数据处

Java IO系统总结

1 Java IO版本 Java库的IO分为输入/输出两部分. 早期的Java 1.0版本的输入系统是InputStream及其子类,输出系统是OutputStream及其子类. 后来的Java 1.1版本对IO系统进行了重新设计.输入系统是Reader及其子类,输出系统是Writer及其子类. Java1.1之所以要重新设计,主要是为了添加国际化支持(即添加了对16位Unicode码的支持).具体表现为Java 1.0的IO系统是字节流,而Java 1.1的IO系统是字符流. 字节流,就是数据

windows7关闭语音识别功能节省系统空间技巧

  windows7关闭语音识别功能节省系统空间技巧           具体方法如下: 1.首先打开"控制面板"选项,将查看方式切换到"类别",然后找到并点击"轻松访问"选项; 2.之后进入轻松访问窗口,找到"语音识别"选项并点击进入; 3.然后在语音识别窗口选择"高级语音选项"选项; 4.最后在语音识别的属性窗口,切换到"语音识别"选项卡,然后将"用户设置"下的&

Win7系统监控技巧

  公司的电脑个人隐私性极差,稍不留神就可能让他人窥探到我们的个人隐私.即使知道别人动过自己的电脑想理论但又苦于没有证据这怎么办呢?下面小编就为大家介绍一下Win7系统监控技巧. 在这里,小编以QQ为例,启用这监控功能主要有以下三个步骤: 第一:启用审核策略 1. 在开始搜索栏中键入"gpedit.msc",回车,打开组策略编辑器.(若弹出用户账户控制窗口,请允许以继续) 2. 定位到"计算机配置"→"Windows 设置"→"安全设置