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编程语言实现的微型操作系统模型,它主要涵盖了四个核心领域:内存管理、进程管理、文件管理和进程通信。这样的项目旨在帮助开发者理解操作系统的工作原理,并提供了一个实践平台来...
本文详细介绍了如何优化Java堆大小的五个技巧,包括理解JVM的基本原理、评估静态内存需求等。这些技巧不仅有助于解决常见的OutOfMemoryError等问题,还能显著提高Java应用的整体性能。在实践中,开发者应当结合具体...
内容概要:本文详细介绍了 Java 内存泄漏的常见原因及解决方案,提供了十种实用技巧。具体包括使用 WeakReference 和 SoftReference 管理对象引用、利用 Cleaner 进行资源清理、监控引用链、使用内存分析工具、检查...
在java中,所有实例域、静态域和数组元素存储在堆内存中,堆内存在线程之间共享(本文使用“共享变量”这个术语代指实例域,静态域和数组元素)。局部变量(Local variables),方法定义参数(java语言规范称之为...
总之,理解Java内存管理和防止内存泄漏是每个Java开发者必备的技能。通过深入学习和实践,开发者可以编写出更加高效、稳定的程序,同时,不断学习新的知识,如Python小程序开发和C语言编程,能够帮助开发者更好地...
GCJava性能调优JVMHeapJava编程语言 摘要:Java堆容量不足可以对性能造成很大影响,这样无疑就给程序带来不可必要的麻烦,本文总结了影响Java堆容量不足的五大原因...下面他将和大家分享非常实用的5个Java堆优化技巧。
小程序和Python的实践也能锻炼开发者在有限资源下的优化技巧,这对于防止和处理内存泄漏同样有帮助。 总之,要成为一名优秀的Java开发者,不仅需要掌握编程语法和面向对象设计,还要深入理解内存管理,防止和解决...
本文主要讨论了如何在 Java 中读取任务管理器信息,包括物理内存、剩余物理内存、已使用物理内存、内存使用率、cpu 占有率等信息。 java 中读取任务管理器信息的必要性: 在实际开发中,了解系统的当前状态是非常...
【Java+MySQL小型超市管理系统】是一个综合性的应用项目,它结合了Java编程语言和MySQL数据库管理系统,用于构建一个适用于小型超市的信息化管理平台。在这个系统中,Java Swing库被用来创建用户界面,提供友好的...
Java仓库管理系统项目源码是一个基于Java技术开发的用于管理仓库库存、进出货流程以及相关数据的软件系统。这个系统提供了全面的功能,旨在提高仓库管理效率,确保库存数据准确无误,便于企业进行供应链管理和决策。...
这个工具的界面设计简洁且直观,提供了一个用户友好的方式来查看和管理运行在Windows环境中的Java任务。 1. JNI(Java Native Interface)详解: JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码...
在Java开发中,当面临大批量数据导出到Excel文件时,可能会遇到内存溢出的问题。这是因为Excel文件格式本身的设计,以及Java默认处理大数据的方式,可能导致内存占用过高,尤其是在一次性加载大量数据到内存中进行...
JAVA图书管理系统毕业设计带源码 本设计是为图书馆集成管理系统设计一个界面,图书馆集成管理系统是用MICROSOFT VISUAL Foxpro 6.0 来建库(因特殊原因该用 MICROSOFT Access来建库)。它包括: 中文图书数据库; ...
Java酒店管理系统是一款基于Java编程语言开发的软件应用,...综上所述,Java酒店管理系统是一个综合性的解决方案,它利用Java的强大功能和灵活性,为酒店行业带来了高效、智能化的管理方式,提升了整个行业的运营效率。
【Java超市管理系统Eclipse】是一个基于Java编程语言和Eclipse集成开发环境的项目,用于实现一个全面的超市管理功能。这个系统涵盖了商品管理、库存控制、销售记录、客户管理等多个核心模块,旨在提高超市运营效率,...
Jsp酒店管理系统/Java酒店管理系统 本系统是WEB模式的宾馆酒店管理系统(Jsp酒店管理系统/Java酒店管理系统) 运行环境:Tomact+JDK1.5 编程模式:Ajax+JSP+JavaBean+JavaServlet 后台数据库:MS-Access/MSSQL 系统...
java图书管理系统java图书管理系统java图书管理系统+sql java图书管理系统java图书管理系统java图书管理系统+sqljava图书管理系统java图书管理系统java图书管理系统+sql
内存中动态编译执行Java代码是一种高级编程技巧,它允许我们在程序运行时根据需要创建、编译和执行新的Java代码。这种技术在某些场景下非常有用,比如在元编程、插件系统、自定义脚本执行或者代码热更新中。在Java中...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
【Java学籍管理系统】是一个基于Java编程语言开发的软件应用,主要用于管理教育机构的学生学籍信息。这样的系统在毕业设计或课程设计中是常见的实践项目,因为它涵盖了多种核心的计算机科学概念和技术,如数据库交互...