Java语言中内存管理的几个小技巧.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浪曦网- 国内顶级IT 视频网络编程教育平台 Www.LangSin.Com Java 语言中内存管理的几个小技巧 Java 做的系统给人的印象是什么?占内存!说道这句话就会有 N 多人站出来为java 辩护, 并举出一堆的性能测试报告来证明这一点。 其实从理论上来讲 java 做的系统并不比其他语言开发出来的系统更占用内存,那么为 什么却有这么N 多理由来证明它确实占内存呢?两个字,陋习。 (1)别用new Boolean()。 在很多场景中Boolean 类型是必须的,比如JDBC 中boolean 类型的set 与get 都是通过 Boolean 封装传递的,大部分ORM 也是用Boolean 来封装boolean 类型的,比如: ps.setBoolean(isClosed,new Boolean(true)); ps.setBoolean(isClosed,new Boolean(isClosed)); ps.setBoolean(isClosed,new Boolean(i==3)); 通常这些系统中构造的Boolean 实例的个数是相当多的,所以系统中充满了大量Boolean 实例小对象,这是相当消耗内存的。Boolean 类实际上只要两个实例就够了,一个true 的实 例,一个false 的实例。 Boolean 类提供两了个静态变量: public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); 需要的时候只要取这两个变量就可以了, 比如: ps.setBoolean(isClosed,Boolean.TRUE); 那么象 2、3 句那样要根据一个 boolean 变量来创建一个 Boolean 怎么办呢?可以使用 Boolean 提供的静态方法:Boolean.valueOf () 比如: ps.setBoolean(isClosed,Boolean.valueOf(isClosed)); ps.setBoolean(isClosed,Boolean.valueOf(i==3)); 浪曦网- 国内顶级IT 视频网络编程教育平台 Www.LangSin.Com 页 1 浪曦网- 国内顶级IT 视频网络编程教育平台 Www.LangSin.Com 因为valueOf 的内部实现是:return (b ? TRUE : FALSE); 所以可以节省大量内存。相信如果Java 规范直接把Boolean 的构造函数规定成private, 就再也不会出现这种情况了。 (2 )别用new Integer。 和Boolean 类似,java 开发中使用Integer 封装int 的场合也非常多,并且通常用int 表 示的数值通常都非常小。SUN SDK 中对Integer 的实例化进行了优化,Integer 类缓存了-128 到 127 这256 个状态的Integer,如果使用Integer.valueOf(int i),传入的int 范围正好在此内,就 返回静态实例。这样如果我们使用Integer.valueOf 代替new Integer 的话也将大大降低内存的 占用。如果您的系统要在不同的SDK (比如IBM SDK )中使用的话,那么可以自己做了工具 类封装一下,比如IntegerUtils.valueOf(),这样就可以在任何SDK 中都可以使用这种特性。 (3 )用StringBuffer 代替字符串相加。 这个我就不多讲了,因为已经被人讲过N 次了。我只想将一个不是笑话的笑话,我在 看国内某“著名”java 开发的WEB 系统的源码中,竟然发现其中大量的使用字符串相加, 一个拼装SQL 语句的方法中竟然最多构造了将近100 个string 实例。无语中! (4 )过滥使用哈希表 有一定开发经验的开发人员经常会使用 hash 表(hash 表在 JDK 中的一个实现就是 HashMap)来缓存一些数据,从而提高系统的运行速度。比如使用 HashMap 缓存一些物料 信息、人员信息等基础资料,这

文档评论(0)

智慧书苑 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档