zoukankan      html  css  js  c++  java
  • Java Memory Management Skill List

    Java内存管理小技巧:

    1. 尽量使用直接量

    当需要使用字符串,还有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等字符。

    1. 使用StringBuilder和StringBuffer进行字符串连接

    String代表字符序列不可辨的字符串,StringBuilder和StringBuffer都代表字符序列可变的字符串。

    如果程序使用多个String对象进行字符串连接运算,在运行时将生成大量临时字符串,这些字符串会保存在内存中从而导致程序性能下降。

    1. 尽量释放无用对象的引用

    在耗费大量内存操作之前先释放不需要的对象。比如obj=null;

    1. 尽量少用静态变量

    最坏的清空是某个对象被static变量所引用,那么垃圾回收机制通常是不会回收这个对象所占的内存。静态变量的生命周期与类相同,只要类依然被加载着,静态变量也会在内存中的Permanent代里。

    1. 避免在经常调用的方法,循环中创建Java对象

    对象的生命周期不长,很快就要进入回收状态。

    1. 缓存经常使用的对象

    使用HashMap进行缓存或者直接使用某些开源的缓存项目。如果使用HashMap进行缓存,程序员需要手动控制HashMap容器里的key-value对不至于太多,因为当key-value太多时将导致HashMap占用过大的内存,从而导致系统性能下降。OSCache,Ehcache等大多实现了FIFO,MRU等常见的缓存算法。

    1. 尽量不要使用finalize方法

    自己调用finalize方法会导致垃圾回收器的负担更大,导致程序运行效率更差。

    1. 考虑使用SoftReference

    当程序需要创建长度很大的数组时,可以考虑使用SoftReference来白装数组元素,而不是直接让数组元素来引用对象。但是要记住软引用的不确定性,可能会自动被回收。

  • 相关阅读:
    几种编辑器的markdown-toc生成目录在github上的表现
    Docker 镜像文件的导入和导出
    Python 的 os 与 sys 模块
    IPython 自动重载魔术
    一种新的python局部调试手法
    Python 动态从文件中导入类或函数的方法
    python2中新式类和经典类的多重继承调用顺序
    Python运行目录或压缩文件
    子类化内置类型
    Django 数据库访问性能优化
  • 原文地址:https://www.cnblogs.com/pangblog/p/3243808.html
Copyright © 2011-2022 走看看