java内存回收机制

Java内存回收机制

 1.对象的创建与可达

  Java中,所有对象都是通过new关键字来创建的,JVM会在堆内存中开辟一块空间来存储对象。在创建对象时一般都会有引用来指向他,(匿名对象除外)这样我们就能通过引用来找到当前这个对象。由于对象又是由一条一条线程创建的,因此,把Java对象的创建当成一种有向图的话,那么线程对象就是有向图的起点。所以当有引用指向Java对象时,线程对象到Java对象就是可达的,如果没有引用指向Java对象时,线程对象到Java对象就是不可达的。

 2.垃圾回收机制

  如果Java对象是不可达的,那么JVM的垃圾回收机制就会主动回收他们了。在这里需说明一下,除了可达状态和不可达状态还有一个可恢复状态,如果Java对象在失去所有引用时,调用finalize方法能够拿到指向他的引用,恢复到可达状态,JVM就不会回收该Java对象。

 3.内存回收机制技巧

  1.在使用包装类或者String类时,不应用new的方式来创建,而是使用直接量来创建他们,如String类就应这样

String str1 = "123";
//而不应该
String str2 = new String("123");

  2.在字符串拼接时使用StringBuilder和StringBuffer而不使用String
  3.尽早释放无用对象的引用
  4.尽量少用静态变量
  5.避免在循环中创建Java对象,而是在外面创建。
  6.缓存经常使用的对象,如数据库连接池,线程池等
  7.尽量不要使用finalize()方法

你可能感兴趣的:(java内存回收机制)