您的位置:首页 > 编程语言 > Java开发

Java高效编程建议

2016-07-23 17:06 302 查看
Android里的Java编程,通过java的虚拟机kvm
实现,虽然kvm比Jvm更高效更有效率,但是由
于手机设备资源的有限性,与虚拟机不能进行
内存操作,全部由vm后台进行回收,所以必要
的java高效编程,是程序更有效率的运行的必
要条件。
垃圾回收

  vm里简称gc,对象在new 操作的时候,就在
vm里对对象进行有了分配内存的操作。vm进行
回收是在一定的步骤和算法后才进行回收,其
中,回收的关键在于vm是否可以通过根集合索
引对象。
对象的创建

1 避免在循环体中创建对象,即使对象很小。

2 尽量及时使对象符合垃圾回收标准

3 不要采用过深得继承层次

4 访问本地变量优于访问类中变量(尽量使用
private的变量和方法)
1)

..

for(int i = 0 ;i<10000;i++)

{

 Object obj = new Object();

 System.out.println("obj"+obj);

}

..
以上方法不妥,应该以下方式可以尽量少得创建
对象,减轻vm的回收负担:
..

 Object obj = null;

for(int i = 0 ;i<10000;i++)

{

 obj = new Object();

 System.out.println("obj"+obj);

}

..
public class A

{

 private Hashtable table = new Hashtable
();

public A()

{

//将HashTable对象初始化了2次

 table = new Hashtable();

}
正确方式
public class A

{

 private Hashtable table = new Hashtable
();

//默认的构造方法尽量不要初始化对象

public A()

{
}

}
3 应用阶段
任何默认对象都是强引用(Strong Reference
),对于一些应用对象可以指定他的引用类型
(Soft Reference ,Weak Reference ,使vm
便于处理和回收。
3.1 软引用在内存足够的情况下不回收,但内
存 不够的话,优先回收。实现常用资源的缓冲
,实现cache的功能。
..

A a = new A();

//使用a

..

//使用完a了,将他设置为soft ,并释放强引


SoftReference sr =new SoftReference(a);

a = null ;

..

//下次使用时

if()

{

 a = sr.get();

}

esle{

//GC优于低内存,已释放a,因此需要重新加载

a = new A();

 sr = new SoftReferce(a);

}

...
3.2 弱引用(WeakReference)对于 Soft引用有
很大的不同在于,GC在进行回收时,需要通过
算法判断是否回收Soft引用对象,而对于Weak
引用对象,GC总是直接进行回收。Weak引用更
容易被GC回收。
..

A a = new A();

//使用a

..

//使用完a了,将他设置为weak ,并释放强引


WeakReference sr =new WeakReference(a);

a = null ;

..

//下次使用时

if()

{

 a = sr.get();

}

esle{

//GC优于低内存,已释放a,因此需要重新加载

a = new A();

 sr = new WeakReferce(a);

}

...
4 另外,在使用对象的时候再实现对象,要注
意对象的作用域,作用域越小越好,但对象不
用的时候要像C++里的一样把对象设置成null。
void f()

{

 int i;

 A a= new A();

//类A的对象被创建

//在判断语句之外没有用过a对象

..

if()

{

  //类A的对象a仅在次用到

   a.doSomeThing();

}

..

}

..
高效的书写
void f()

{

 int i;

 

if()

{

  A a= new A();

  //类A的对象被创建

  //类A的对象a仅在次用到

  a.doSomeThing();

  a = null ;

}

..

}

..

 参考 Java优化编程 整理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: