全国咨询热线:029-62258374

分享Java内存优化的几个小技巧
作者:    来源:西安芯学苑   发布时间:2017-08-17 10:12  阅读:

 

  有的人觉得Java已经隐没在其他计算机语言的大潮中了,其实不然,我们日常用的软件、银行的系统、游戏等都是有Java的功劳的。理论上来讲Java系统并不会比其他语言系统更占用内存,但是为什么它确实占内存呢?两个字,陋习。下文我就讲讲那些日常编写中的坏习惯。

Java学习

 

  首先来了解java是如何管理内存的呢?

  Java的内存管理就是对象的分配和释放问题。

  分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。

    释放:对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作。但同时,它也加重了JVM的工作。因为,GC为了能够正确释放对象,GC必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC都需要进行监控。

  1、变量只有在用到它的时候才定义和实例化。

  2、尽量少用finalize函数,因为finalize()会加大GC的工作量,而GC相当于耗费系统的计算能力。

  3、用StrurringBuffer代替字符串相加

  4、保证每个IO操作,connection及时关闭

  5、别用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中都可以使用这种特性。

  6、尽量在合适的场景下使用对象池技术以提高系统性能,缩减缩减开销,但是要注意对象池的尺寸不宜过大,及时清除无效对象释放内存资源,综合考虑应用运行环境的内存资源限制,避免过高估计运行环境所提供内存资源的数量。

  7、对频繁使用的对象采用对象池技术。

  8、避免过深的类层次结构和过深的方法调用

  9、尽量避免在类的构造函数里创建、初始化大量的对象,防止在调用其自身类的构造器时造成不必要的内存资源浪费,尤其是大对象,JVM会突然需要大量内存,这时必然会触发GC优化系统内存环境;显示的声明数组空间,而且申请数量还极大。

  10、尽量少用静态变量,因为静态变量是全局的,GC不会回收的

  11、大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。

 

 
0
上一篇:Java基础知识入门
下一篇:程序员与Java的情结

关于我们 | Java培训 | Android培训 | WEB前端培训 |在线咨询 | 常见问题 | 高薪就业

地址:西安市小寨十字东南角国贸大厦12层 邮编:712000

版权所有:陕西芯学苑信息科技有限公司 备案号:陕ICP备16018856号 咨询电话:029-62871062

在线咨询