java内存管理的8个小技巧
来源:互联网 发布:澳洲人工智能 编辑:程序博客网 时间:2024/05/16 12:26
1. . 尽量使用直接量
这个大家应该清楚,所以只做简诉:
String str = "hello";
上面这种方式会创建一个“hello”字符串,而且JVM的字符缓存池还会缓存这个字符串;
String str = new String("hello");
此时程序除创建字符串外,str所引用的String对象底层还包含一个char[]数组,这个char[]数组依次存放了h,e,l,l,o
2. 使用StringBuilder和StringBuffer进行字符串连接
这个我就不多讲了,用String做连接时会生成大量临时字符串
3. 尽早释放无用对象的引用
大部分时,方法局部引用变量所引用的对象 会随着方法结束而变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。
例如:
Public void test(){
Object obj = new Object();
……
Obj=null;
}
上面这个就没必要了,随着方法test()的执行完成,程序中obj引用变量的作用域就结束了。但是如果是改成下面:
Public void test(){
Object obj = new Object();
……
Obj=null;
//执行耗时,耗内存操作;或调用耗时,耗内存的方法
……
}
这时候就有必要将obj赋值为null,可以尽早的释放对Object对象的引用。
4. 尽量少用静态变量
当某个对象被static变量所引用,那么GC通常是不会回收这个对象所占的内存。如下:
Class Person{
static Object obj = new Object();
}
对于上面的对象而言,obj变量的生命周期与Person类同步,在其不被卸载的情况下,其对应的Class对象会常驻内存,知道程序结束。
5. 避免在经常调用的方法、循环中创建java对象
6. 缓存经常使用的对象
这里首先说一个实现缓存时常有的两种方式:
n 使用HashMap进行缓存
n 直接使用某些开源的缓存项目
如果是第一种,程序员需要手动控制HashMap容器里key-value对不至于太多,从而导致其占用过大的内存,致使系统性能下降。
而第二种多使用一些缓存算法,提高系统运行效率,例如OSCache,Ehcache等,它们大都实现了FIFO\MRU等常见的缓存算法。
7. 尽量不要使用finalize方法
实际上,将资源清理放在finalize方法中完成是非常不好的选择,由于GC的工作量很大,尤其是回收Young代内存时,大都会引起应用程序暂停,所以再选择使用finalize方法进行资源清理,会导致GC负担更大,程序运行效率更差。
8. 考虑使用SoftReference
当程序需要创建长度很大的数组时,可以考虑使用SoftReference来包装数组元素
SoftReference是个很好的选择,当内存足够时,它的功能等同于普通引用,当内存不足时,它会牺牲自己,释放软引用所引用的对象。例如创建一个长度为100000的Person数组。
注意:在使用软引用来引用对象时不要忘记软引用的不确定性,程序通过软引用所获取的对象有可能为null(内存紧张时)。所以当应用程序取出SoftReference所引用的java对象之后,应该显式判断该对象死后为null,为null时,应该重建对象。
总结:这只是在学习过程中的一些笔记,希望大家多沟通,共同进步
- java内存管理的8个小技巧
- java内存管理的8个小技巧
- Java内存管理的9个小技巧
- Java内存管理的9个小技巧
- 远离陋习 Java内存管理的9个小技巧
- Java内存管理的9个小技巧
- 远离陋习 Java内存管理的9个小技巧
- 远离陋习:Java内存管理的9个小技巧
- 远离陋习:Java内存管理的9个小技巧
- Java内存管理的9个小技巧
- Java内存管理的小技巧
- Java内存管理的小技巧
- Java内存管理的几个小技巧
- Java内存管理的小技巧
- Java内存管理的九个小技巧
- java内存管理的小技巧
- Java内存管理的小技巧
- java内存管理小技巧
- 判断网络是否正常
- 2011-7-20 10:06:59
- VC++ 6.0如何创建与调用动态链接库
- JAVA接口作为参数传递
- 计算机达人成长之路 之软件分析与设计
- java内存管理的8个小技巧
- 一定要看的 Android 资源目录的相关知识
- rfc4893
- 模板
- VC数据库ADO技术,好文章
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- 获取当前可使用的网卡并检查网卡设置(网卡的IP,网关,子网掩码,DNS,备用DNS信息)
- rfc
- 老SDRAM和DDR SDRAM时序图与信号完整性仿真结合运用(2) -版本博客图片丢失,增加图片后又不能上传,shit.