Java Memory Management Skill List
2013-08-07 18:26
148 查看
Java内存管理小技巧:
尽量使用直接量
当需要使用字符串,还有Byte,Short,Integer,Long,Float,Double,Boolean,Character包装类的实例时,程序不应该采用new的方式来创建对象,而应该直接采用直接量来创建它们。
String str=”hello”; 这种方法会创建一个”hello”字符串,而且JVM的字符串缓存池还会缓存这个字符串。String str = new String(“hello”);创建了一个缓存在字符串缓存池中的”help”字符串。除此之外str所引用的String对象底层还包含一个char[]数组,这个char[]数组里依次存放了h,e,l,l,o等字符。
使用StringBuilder和StringBuffer进行字符串连接
String代表字符序列不可辨的字符串,StringBuilder和StringBuffer都代表字符序列可变的字符串。
如果程序使用多个String对象进行字符串连接运算,在运行时将生成大量临时字符串,这些字符串会保存在内存中从而导致程序性能下降。
尽量释放无用对象的引用
在耗费大量内存操作之前先释放不需要的对象。比如obj=null;
尽量少用静态变量
最坏的清空是某个对象被static变量所引用,那么垃圾回收机制通常是不会回收这个对象所占的内存。静态变量的生命周期与类相同,只要类依然被加载着,静态变量也会在内存中的Permanent代里。
避免在经常调用的方法,循环中创建Java对象
对象的生命周期不长,很快就要进入回收状态。
缓存经常使用的对象
使用HashMap进行缓存或者直接使用某些开源的缓存项目。如果使用HashMap进行缓存,程序员需要手动控制HashMap容器里的key-value对不至于太多,因为当key-value太多时将导致HashMap占用过大的内存,从而导致系统性能下降。OSCache,Ehcache等大多实现了FIFO,MRU等常见的缓存算法。
尽量不要使用finalize方法
自己调用finalize方法会导致垃圾回收器的负担更大,导致程序运行效率更差。
考虑使用SoftReference
当程序需要创建长度很大的数组时,可以考虑使用SoftReference来白装数组元素,而不是直接让数组元素来引用对象。但是要记住软引用的不确定性,可能会自动被回收。
尽量使用直接量
当需要使用字符串,还有Byte,Short,Integer,Long,Float,Double,Boolean,Character包装类的实例时,程序不应该采用new的方式来创建对象,而应该直接采用直接量来创建它们。
String str=”hello”; 这种方法会创建一个”hello”字符串,而且JVM的字符串缓存池还会缓存这个字符串。String str = new String(“hello”);创建了一个缓存在字符串缓存池中的”help”字符串。除此之外str所引用的String对象底层还包含一个char[]数组,这个char[]数组里依次存放了h,e,l,l,o等字符。
使用StringBuilder和StringBuffer进行字符串连接
String代表字符序列不可辨的字符串,StringBuilder和StringBuffer都代表字符序列可变的字符串。
如果程序使用多个String对象进行字符串连接运算,在运行时将生成大量临时字符串,这些字符串会保存在内存中从而导致程序性能下降。
尽量释放无用对象的引用
在耗费大量内存操作之前先释放不需要的对象。比如obj=null;
尽量少用静态变量
最坏的清空是某个对象被static变量所引用,那么垃圾回收机制通常是不会回收这个对象所占的内存。静态变量的生命周期与类相同,只要类依然被加载着,静态变量也会在内存中的Permanent代里。
避免在经常调用的方法,循环中创建Java对象
对象的生命周期不长,很快就要进入回收状态。
缓存经常使用的对象
使用HashMap进行缓存或者直接使用某些开源的缓存项目。如果使用HashMap进行缓存,程序员需要手动控制HashMap容器里的key-value对不至于太多,因为当key-value太多时将导致HashMap占用过大的内存,从而导致系统性能下降。OSCache,Ehcache等大多实现了FIFO,MRU等常见的缓存算法。
尽量不要使用finalize方法
自己调用finalize方法会导致垃圾回收器的负担更大,导致程序运行效率更差。
考虑使用SoftReference
当程序需要创建长度很大的数组时,可以考虑使用SoftReference来白装数组元素,而不是直接让数组元素来引用对象。但是要记住软引用的不确定性,可能会自动被回收。
相关文章推荐
- Java Memory Management Skill List
- Java (JVM) Memory Model – Memory Management in Java
- Java Memory Management and Optimization
- memory management in the java HotSpot Virtual Machine(中文翻译)
- java.lang.OutOfMemoryError: Java heap space解决方法
- 【引用】Java容器类List、ArrayList、Vector及map、HashTable、HashMap分别的区别
- Java数组与容器类分析资料--数组、List和Set、Map等
- JAVA中数组转化成list的方法
- java中List对象列表去重或取出以及排序
- 解决Exception in thread "http-bio-8080-exec-2" java.lang.OutOfMemoryError: PermGen space
- 【Java面试题】36 List、Map、Set三个接口,存取元素时,各有什么特点?
- Java中 List的遍历
- 【JVM】Java-JVM-OutOfMemoryError实战
- java List接口及子类
- Java源码初学_AbstractList&AbstractCollection
- java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)
- java List 排序 Collections.sort() 对 List 排序
- Java List/HashSet/HashMap的排序
- Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案
- java.lang.OutOfMemoryError