软件构造笔记 8.3 Code Tuning for Performance Optimization

本文探讨了代码调优的目的和策略,强调了不是为了修复bug,而是提升性能。介绍单例模式和轻量模式在对象创建和重用中的应用,以及如何通过原型模式和引用拷贝来优化。此外,还讨论了字符串的代码调整,包括字符串常量池的工作原理,以及如何通过合理使用字符串文字和关键字new来规避垃圾回收。

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

1.代码调优过程和策略

代码调优不是为了修复bug,而是对正确的代码进行修改以提高性能,通常是小规模的变化。


调优不会减少代码行数;应有明确的优化目标;不要边写边调优;不是性能优化的第一选择。

2.代码调整用于对象创建和重用

单例模式:某些类在应用运行期间,只需要一个实例。强制客户只能创建一个Object实例,避免因为new操作带来的时空性能(尤其是GC)的损失,也便于复用。设置静态变量来存储单一实例对象,将构造器设置为private,从而客户无法new,提高静态方法来获取单一实例变量。


轻量模式:考虑文本编辑器的”字符“,同一个字符重复出现多次,代表同样内容,但字体符号不同。


该模式允许在应用中不同部分共享使用objet,降低大量Object带来的时空代价。

内部特征:不管在什么场合使用该Object,内部特征都不变。

外部特征:不是固定的,需要不同场合context分别指派/计算其值


单例模式不区分各场合下的不同表现形式,统一用一个实例表示。

轻量模式的同一个事物有多种表现形式,更灵活。

原型模式:直接new的时空代价高,所以通过clone而非new来创建



引用拷贝:创建一个指向对象的引用变量的副本。所以我们将有两个引用同一个对象的引用变量。


对象拷贝:创建对象本身的副本。所以我们将有两个引用变量,每个引用变量引用不同的对象。



代价是原本可GC的对象,现在留在pool中,导致内存浪费,相当于用空间换时间。单例和轻量模式本质上都是对象池,但有不同的变化。

规范化:不要保留对象的多个拷贝。仅保留少量的Object。==比equals的效率更高,使用尽可能将Object转化为简单数据类型加以存储和处理。


规避垃圾回收:核心思想是减少创建Object的数量,避免GC的代价。

尽可能的使用简单数据类型,对类的成员变量也是如此;

局部的简单数据类型在stack中存储,GC代价低;

类的简单类型成员变量在GC的时候代价也低,若为Object成员变量则需要GC。

3.字符串的代码调整

字符串常量池:String Constant PoolHeap中包含字符串对象引用的特殊内存区域。


使用字符串文字:String s =“java”;

在双引号内写入的字符串称为字符串文字;

当我们创建字符串文字时,JVM会检查字符串;

该字符串已经存在于池中,那么它的引用被提取;

如果该字符串不在池中,则会在其中创建一个新的字符串对象。

使用新的关键字:String s = new String“java”;

当我们使用new关键字创建字符串时,它会转到堆。



EFDC(The Environmental Fluid Dynamics Code)模型是由威廉玛丽大学维吉尼亚海洋科学研究所(VIMS,Virginia Institute of Marine Science at the College of William and Mary)的John Hamrick等人开发的三维地表水水质数学模型,可实现河流、湖泊、水库、湿地系统、河口和海洋等水体的水动力学和水质模拟,是一个多参数有限差分模型。经过近20年的发展和完善,目前该模型已在大学,政府机关和环境咨询公司等组织中被广泛使用,并成功用于美国和欧洲其他国家100多个水体区域的研究,在我国已被应用于云南滇池水质模拟,重庆两江汇流水动力模拟、密云水库营养物模拟等以及内蒙古乌梁素海地区水体富营养化模拟等。[1] 该模型系统包括水动力、泥沙、有毒物质、水质、底质、风浪等模块,模拟计算过程中首先完成流场计算,获得三维流速场的时空分布特征,在此基础上计算泥沙迁移、冲淤作用,进而模拟受粘性泥沙吸附影响的各水质变量动态变化过程。为更好的拟合研究区地形条件,模型在水平方向除可采用传统的 直角坐标外还可在水平向使用正交曲线坐标,垂直方向采用σ坐标。 EFDC水动力学模块可计算如下内容:流速,示踪剂,温度,盐度,近岸羽流和漂流。水动力学模型输出变量可直接与水质,底泥迁移和毒性物质等模块耦合,作为物质运移的驱动条件。同时EFDC也提供了与WASP等软件的接口,输出可供水质模拟使用的.HYD文件。EFDC泥沙模块可进行多组分泥沙的模拟,根据在水体里面的迁移特征把泥沙分为悬移质和推移质;悬移质根据粒径大小分为粘性泥沙和非粘性泥沙,进而还可细分为若干组。可根据物理或经验模型模拟泥沙的沉降、沉积、冲刷及再悬浮等过程。EFDC有毒污染物模块可以模拟各类型污染物在水体中的迁移转化过程,该模块需要研究者针对特定有毒污染物提供具体反应过程设定反应系数。EFDC的水质模块,主要模拟水体中以藻类生长为中心的各变量间相互关系。而底质模块模拟沉积物与水体之间的物质交换过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值