`
zengshaotao
  • 浏览: 787491 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java高效编程(节约内存)

 
阅读更多

从理论上来讲Java做的系统并不比其他语言开发出来的系统更占用内存,那么为什么却有这么多理由来证明它确实占内存呢?两个字,陋习。
  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);
  因为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缓存一些物料信息、人员信息等基础资料,这 在提高系统速度的同时也加大了系统的内存占用,特别是当缓存的资料比较多的时候。其实我们可以使用操作系统中的缓存的概念来解决这个问题,也就是给被缓存的分配一个一定大小的缓存容器,按照一定的算法淘汰不需要继续缓存的对象,这样一方面会因为进行了对象缓存而提高了系统的运行效率,同时由于缓存容器不是无限制扩大,从而也减少了系统的内存占用。现在有很多开源的缓存实现项目,比如ehcache、oscache等,这些项目都实现了FIFO、MRU等常见的缓存算法。
  5、避免过深的类层次结构和过深的方法调用。
  因为这两者都是非常占用内存的(特别是方法调用更是堆栈空间的消耗大户)。
  6、变量只有在用到它的时候才定义和实例化。
  7、尽量避免使用static变量,类内私有常量可以用final来代替。
  8、对频繁使用的对象采用对象池技术
  9、保证每个IO操作,connection及时关闭

分享到:
评论

相关推荐

    JAVA技巧(Java多线程运行时,减少内存占用量).pdf

    根据提供的文件内容,该文件主要讨论了在Java多线程环境下如何减少内存占用量。文件内容并不完整,且存在 OCR 扫描错误,...在进行多线程编程时,应综合考虑以上各点,合理规划资源的使用,以实现高效稳定的程序运行。

    清华大学 java编程代码

    11. **JVM 内存管理**:理解 Java 虚拟机的工作原理,包括内存区域、垃圾收集机制、性能优化等方面,有助于写出更高效的代码。 12. **Spring 框架**:作为 Java 开发中广泛使用的框架,Spring 提供了依赖注入、AOP...

    使用Java实现数据库编程

    ### 使用Java实现数据库编程 #### 一、为什么需要规范的数据库设计 在学习数据库的过程中,很多初学者可能会疑惑,为何不直接根据业务需求快速搭建数据库并进行数据操作,而要强调设计的重要性。实际上,这种设计...

    精通JAVA编程.

    - **自动内存管理**:Java 自动进行垃圾回收,开发者无需手动管理内存,大大减少了内存泄漏的可能性。 - **安全性**:Java 提供了严格的安全机制,可以有效防止恶意代码的攻击。 - **多线程**:Java 内置了对多线程...

    java编程中 为了性能 尽量要做的26点

    1. **使用单例模式**:在需要控制资源访问、节约内存或实现跨线程通信的场景下,使用单例模式可以有效减少内存占用和提高效率。 2. **避免滥用静态变量**:静态变量的生命周期较长,可能导致内存泄漏。避免在不必要...

    Java编程中“为了性能”尽量要做到的一些地方

    在Java编程中,为了提升程序的性能,开发者需遵循一系列最佳实践原则,下面将详细解析这些原则及其背后的原因。 ### 1. 合理运用单例模式 单例模式是设计模式之一,确保一个类只有一个实例,并提供一个全局访问点...

    Java编程中“为了性能”要做的几点

    本文将深入探讨Java编程中为了提升性能而需关注的关键点,这些知识点基于标题“Java编程中‘为了性能’要做的几点”,描述及部分内容,旨在帮助开发者理解和实践高效编程技巧。 ### 1. 合理运用单例模式 单例模式...

    Java编程中“为了性能”需做的26件事

    本文将基于“Java编程中‘为了性能’需做的26件事”的标题和描述,深入探讨一系列实用技巧,旨在帮助程序员编写出更加高效、低耗的Java应用。 #### 1. 合理运用单例模式 单例模式通过确保类只有一个实例并提供一个...

    java开源包4

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包6

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包101

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包9

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包5

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包8

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包10

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    JAVA上百实例源码以及开源项目源代码

    内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有...

    如何编写高效代码

    2. **节约内存使用**:合理管理内存资源,避免过度分配和频繁回收,以保持系统稳定性和响应速度。 #### 实践技巧 1. **避免无谓的对象创建**:对象的创建和销毁会消耗系统资源,尤其是在频繁调用的情况下,可能...

    java开源包3

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    java开源包1

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

    Java资源包01

    业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH...

Global site tag (gtag.js) - Google Analytics