gzyueqian
13352868059

粤嵌Java培训教你避免内存泄漏

更新时间: 2017-08-04 15:02:10来源: 粤嵌教育浏览量:4163

Java程序运行会不断的分配内存空间,不再使用的内存空间应该即时回收它们,从而保证可以保证系统可以再次使用这些内存空间。如果存在无用的内存没有被收回来,那就是内存泄露。粤嵌Java培训简单介绍下如何避免内存泄漏。 

 

内存泄漏大致分为:常发性内存泄漏,偶发性内存泄漏,一次性内存泄漏,隐式内存泄漏等。  

垃圾回收机制:  

a. 跟踪并监控每个java对象,当某个对象处于不可达的状态时,就回收该对象所占用的内存。  

b. 清理内存分配、回收过程中产生的内存碎片。  

Java避免内存泄露的小技巧  

a. 尽量使用直接量,对于ByteShortIntegerLongFloatDoubleBoleanCharacter程序不应该使用new 方式创建对象,而采用直接量创建它们。  

b. 使用StringBuilderStringBuffer进行字符串连接  

StingStringBuilder以及StringBuffer等都可以代表字符串,其中String字符串代表的是不可变的字符串,后两者表示可变的字符串。  

粤嵌Java培训发现,如果使用多个String对象进行字符串连接运算,在运行时可能产生大量临时字符串,这些字符串会保存在内存中从而导致程序性能下降。    

c. 尽量少使用静态变量

类的静态变量的生命周期和类同步的。在类不被卸载的情况下,类对应类对象会常驻内存,知道程序运行结束。  

d.避免在经常调用的方法、循环中创建Java对象。  

e. 缓存经常使用的对象  

如果有些对象需要经常被用到,可以考虑把这些对象用缓存池保存起来,下次用的时候直接从池中拿。典型的就是数据连接池。  

如果系统中还有一些常用的基础信息,可以考虑用缓存,实现缓存的方式有如下两种:  

(1) 使用HashMap进行缓存。  

(2) 直接使用某些开源的缓存项目。       

f. 考虑使用SoftReference  

Java培训时所写的程序需要创建长度很大的数组时,可以考虑使用SoftReferene来包装数组元素,而不是直接让将数组元素来引用对象。此时SoftReference是个很好的选择:当内存足够时,它的功能等同于普通引用;当内存不足时,它会牺牲自己,释放软引用所引用的对象。  

由于软引用引用对象的不确定性(软引用所获取的对象可能为null),所以程序取出SoftReference所引用的Java之后,应该显式判断该对象是否为null; 当该对象为null时,应该重建该对象。

粤嵌Java培训建议,在编程后应该检查程序会不会发生内存泄漏,避免运行时发生意料之外的bug

 

 

 

免费预约试听课