java中代码的优化 java怎么优化代码减少内存( 四 )


和Boolean类似,java开发中使用Integer封装int的场合也非常多,并且通常用int表示的数值都非常小 。SUN SDK中对Integer的实例化进行了优化 , Integer类缓存了-128到127这256个状态的Integer,如果使用 Integer.valueOf(int i),传入的int范围正好在此内,就返回静态实例 。这样如果我们使用Integer.valueOf代替new Integer的话也将大大降低内存的占用 。
(3) 。用StringBuffer的append方法代替"+"进行字符串相加 。
这个已经被N多人说过N次了,这个就不多说了 。
(4) 。避免过深的类层次结构和过深的方法调用 。
因为这两者都是非常占用内存的(特别是方法调用更是堆栈空间的消耗大户) 。
(5) 。变量只有在用到它的时候才定义和实例化 。
这是初学者最容易犯的错,合理的使用变量,并且只有在用到它的时候才定义和实例化,能有效的避免内存空间和执行性能上的浪费 , 从而提高了代码的效率 。
(6) 。避免在循环体中声明创建对象,即使该对象占用内存空间不大 。
这种情况在我们的实际应用中经常遇到,而且我们很容易犯类似的错误
采用上面的第二种编写方式,仅在内存中保存一份对该对象的引用,而不像上面的第一种编写方式中代码会在内存中产生大量的对象引用,浪费大量的内存空间,而且增大了垃圾回收的负荷 。因此在循环体中声明创建对象的编写方式应该尽量避免 。
(7) 。如果if判断中多个条件用'||'或者''连接,请将出现频率最高的条件放在表达式最前面 。
这个小技巧往往能有效的提高程序的性能 , 尤其是当if判断放在循环体里面时,效果更明显 。
1.JVM管理两种类型的内存:堆内存(heap),栈内存(stack) , 堆内在主要用来存储程序在运行时创建或实例化的对象与变量 。而栈内存则是用来存储程序代码中声明为静态(static)(或非静态)的方法 。
2.JVM中对象的生命周期 , 创建阶段,应用阶段,不可视阶段,不可到达阶段,可收集阶段,终结阶段,释放阶段
3.避免在循环体中创建对象,即使该对象点用内存空间不大 。
4.软引用的主要特点是具有较强的引用功能 。只有当内存不够的时候,才回收这类内存,因此在内存足够的时候,它们通常不被回收 。它可以用于实现一些常用资源的缓存,实现Cache的功能
5.弱引用对象与Soft引用对象最大不同就在于:GC在进行回收时,需要通过算法检查是否回收Soft引用对象,而对于Weak引用对象,GC总是进行回收 。
6.共享静态变量存储空间
7.有时候我们为了提高系统性能,避免重复耗时的操作,希望能够重用一些创建完成的对象,利用对象池实现 。类似JDBC连接池 。
8.瞬间值,序列化对象大变量时,如果此大变量又没有用途,则使用transient声明,不序列化此变量 。同时网络传输中也不传输 。
9.不要提前创建对象
10 .(1)最基本的建议就是尽早释放无用对象的引用
A a = new A();
a = null; //当使用对象a之后主动将其设置为空
(2)尽量少用finalize函数 。
(3) 如果需要使用经常用到的图片展,可以使用软引用 。
(4) 注意集合数据类型,包括数组 , 树等数据 , 这些数据结构对GC来说,回收更为复杂,
(5) 尽量避免在类的默认构造器中创建,初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费 。
(6) 尽量避免强制系统做垃圾内存回收 。
(7) 尽量避免显式申请数组空间 。
(8) 尽量在合适的场景下使用对象池技术以提高系统性能,缩减系统内存开销 。

推荐阅读