java优化占用内存的方法

白色玫瑰 程序猿

时间: 2023-07-11 阅读: 2 字数:2766

{}
java做的系统给人的印象是什么?占内存!说道这句话就会有N多人站出来为java辩护,并举出一堆的性能测试报告来证明这一点。其实从理论上来讲java做的系统并不比其他语言开发出来的系统更占用内存,那么为什么却有这么N多理由来证明它确实占内存呢?两个字,陋习。\r\n\r\n(1)别用new Boolean()。\r\n   在很多场景中Boolean类型是必须的,比如JDBC中boolean类型的set与ge

目录

Java系统的内存占用问题

许多人认为使用Java开发的系统占用内存较多,这一观点常常引发争议。支持者会引用大量性能测试报告来反驳这一说法。然而,从理论上讲,Java系统的内存占用并不必然比其他语言更高。造成这种印象的原因,关键在于一些不当的使用习惯。

1. 避免使用new Boolean()

在需要布尔值时,许多开发者直接使用new Boolean(),这会生成多个Boolean对象,导致内存浪费。例如,以下代码生成了过多的Boolean实例:

ps.setBoolean("isClosed", new Boolean(true));
ps.setBoolean("isClosed", new Boolean(isClosed));
ps.setBoolean("isClosed", new Boolean(i == 3));

实际上,Boolean类只需要两个实例:Boolean.TRUEBoolean.FALSE。推荐使用:

ps.setBoolean("isClosed", Boolean.TRUE);

对于动态布尔值,可以使用Boolean.valueOf(),该方法会复用已有实例,节省内存:

ps.setBoolean("isClosed", Boolean.valueOf(isClosed));
ps.setBoolean("isClosed", Boolean.valueOf(i == 3));

2. 避免使用new Integer()

类似于布尔类型,Integer的实例化也应避免使用new Integer(),而是使用Integer.valueOf(),该方法缓存了-128到127范围内的Integer对象同样可以减少内存占用。

3. 使用StringBuffer进行字符串拼接

字符串的拼接如果使用“+”操作符,会创建很多临时的String对象,极大浪费内存。使用StringBufferStringBuilder可以有效解决这个问题。

4. 控制哈希表的使用

HashMap等哈希表的过度使用会导致内存占用增加。我们可以实施缓存策略,通过设定大小限制,控制缓存内容的生命周期,避免无用数据占用内存。可以使用开源缓存框架如ehcache、oscache来实现这一功能。

5. 避免过深的类层次结构和方法调用

过深的类层次结构和多层方法调用不仅影响可读性,也会占用更多的内存。应尽量保持结构的扁平化。

6. 变量延迟定义

变量应在用到时再定义与实例化,以避免不必要的内存占用。

7. 限制static变量的使用

尽量避免使用static变量,类内常量可使用final修饰。

Java内存管理概述

Java的一大优点是内存管理由垃圾收集器(GC)自动完成,程序员不需明确释放内存。

1. 内存分配与释放

在Java中,通过new关键字为对象分配内存,GC负责检测并回收不再被引用的对象,简化了开发人员的工作。

2. 内存管理结构

Java使用有向图表示内存管理,将对象视为图中的顶点,引用关系作为有向边。GC只回收与根节点不可达的对象,使其内存管理精确,但效率较低。

3. 内存泄露

Java也存在内存泄漏问题,主要由无用对象的引用导致。开发者应及时清除这些引用,例如设置对象为null或从集合中移除它们。

4. 监控与优化内存使用

可使用各种工具监测内存使用情况,如Optimizeit Profiler、JProbe Profiler等,帮助识别内存泄露。

5. 使用软引用

软引用可以在内存不足时回收,从而平衡内存使用与性能。

Java内存管理的最佳实践

  1. 及时释放无用对象引用。
  2. 尽量少用finalize方法,降低GC的工作量。
  3. 对频繁使用的对象,如图片,考虑使用软引用。
  4. 注意复杂数据结构对GC的影响。
  5. 在构造方法中避免大量对象的创建。
  6. 勿强制调用GC,允许系统自行管理。
  7. 合理使用对象池,以提升性能。

来源:CSDN博客

本文章网址:https://www.sjxi.cn/detil/af608f70ed134dddb30fc6e9a93d4602

打赏作者

本站为非盈利网站,如果您喜欢这篇文章,欢迎支持我们继续运营!

最新评论
当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复