- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何把程序写得更健壮
8.??? 如何把程序写得更健壮:
???? 1、尽早释放无用对象的引用。?好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露。对于仍然有指针指向的实例,jvm就不会回收该资源,因为垃圾回收会将值为null的对象作为垃圾,提高GC回收机制效率;
???? 2、定义字符串应该尽量使用 String str=”hello”; 的形式?,避免使用String str = new String(“hello”); 的形式。因为要使用内容相同的字符串,不必每次都new一个String。例如我们要在构造器中对一个名叫s的String引用变量进行初始化,把它设置为初始值,应当这样做:
Java代码?
public?class?Demo?{??
????private?String?s;??
????...??
????public?Demo?{??
????????s?=?Initial?Value;??
????}??
????...??
}??
???????? 而非
Java代码?
s?=?new?String(Initial?Value);??
???????? 后者每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为String对象不可改变,所以对于内容相同的字符串,只要一个String对象来表示就可以了。也就说,多次调用上面的构造器创建多个对象,他们的String类型属性s都指向同一个对象。???? 3、我们的程序里不可避免大量使用字符串处理,避免使用String,应大量使用StringBuffer?,因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象,请看下列代码;
Java代码?
String?s?=?Hello;??
s?=?s?+??world!;??
???????? 在这段代码中,s原先指向一个String对象,内容是 Hello,然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为Hello world!,原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。???????? 通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为 String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。
???? 4、尽量少用静态变量?,因为静态变量是全局的,GC不会回收的;
???? 5、尽量避免在类的构造函数里创建、初始化大量的对象?,防止在调用其自身类的构造器时造成不必要的内存资源浪费,尤其是大对象,JVM会突然需要大量内存,这时必然会触发GC优化系统内存环境;显示的声明数组空间,而且申请数量还极大。???????? 以下是初始化不同类型的对象需要消耗的时间:
运算操作?? 示例??? 标准化时间 本地赋值??? i = n 1.0 实例赋值??? this.i = n 1.2 方法调用??? Funct()? 5.9 新建对象??? New Object() 980 ?新建数组??? New int[10] 3100 ???????? 从表1可以看出,新建一个对象需要980个单位的时间,是本地赋值时间的980倍,是方法调用时间的166倍,而若新建一个数组所花费的时间就更多了。?????????这是一个案例想定供大家警戒????????? 使用jspsmartUpload作文件上传,运行过程中经常出现java.outofMemoryError的错误,???????? 检查之后发现问题:组件里的代码???????? m_totalBytes = m_request.getContentLength();???????? m_binArray = new byte[m_totalBytes];???????? 问题原因是totalBytes这个变量得到的数极大,导致该数组分配了很多内存空间,而且该数组不能及时释放。解决办法只能换一种更合适的办法,至少是不会引发outofMemoryError的方式解决。
???? 6、尽量在合适的场景下使用对象池技术?以提高系统性能,缩减缩减开销,但是要注意对象池的尺寸不宜过大,及时清除无效对象释放内存资源,综合考虑应用运行环境的内存资源限制,
您可能关注的文档
- 原来我们都错了 冰箱的正确使用方法.docx
- 去掉SQL文本中的换行符、回车符、制表符.docx
- 厦门ERP品牌前十.docx
- 厦门大学网络教育2013-2014微观经济学.docx
- 原辅材料质量管理部.doc
- 09浙江高考英语_试题评析与其对教学启示.doc
- 双三次插值(bicubic interpolation)原理及MATLAB源码实现.docx
- 双节棍基础……双节棍的基本握法.doc
- 发射实现ToString方法.docx
- 发绀、呼吸困难、呕血、便血.doc
- 新知07动词不定式(原卷版).docx
- 4期肺癌患者管理.pdf
- 氧合指数结合淋巴细胞预后.pdf
- 慢性心衰治疗Chronic congestive heart failure.pdf
- 风湿科扶他林市场分析180619_Voltaren_2st_Strategy Report_xp_V1.6(风湿科).pptx
- 充血性心力衰竭Acute exacerbation of congestive heart failure.pdf
- 201010_互联网医院在线问诊体验报告_ylt_Ver1.0.pptx
- 《中华人民共和国刑法修正案(十一)》培训解读课件.pptx
- 《行政处罚法》培训解读课件.pptx
- 部编版小学语文 六下第五单元学习包 大单元教学课件 .pptx
文档评论(0)