Java中有类似C++ 的delete ,free语句来释放资源吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中有类似C++ 的delete ,free语句来释放资源吗相关的知识,希望对你有一定的参考价值。

Java的gc系统每次释放的时候会造成系统lag一下,郁闷的要死。
请问有没有类似c++的释放资源的语句

java采用了垃圾回收机制,程序员无法操作内存释放
可以通过编程的手段来影响,让对象符合垃圾回收条件。
  1、将无用对象赋值为null.
  2、重新为引用变量赋值。比如:
  Person p = new Person("aaa");
  p = new Person("bbb");
  这样,new Person("aaa")这个对象就是垃圾了——符合垃圾回收条件了。
  3、让相互联系的对象称为“岛”对象
  Person p1 = new Person("aaa");
  Person p2 = new Person("bbb");
  Person p3 = new Person("ccc");
  p1=p2; p2=p3; p3=p1;
  p1=null; p2=null; p3=null;
  在没有对p1、p2、p3置null之前,它们之间是一种三角恋关系。分别置null,三角恋关系依然存在,但是三个变量不在使用它们了。三个Person对象就组成了一个孤岛,最后死在堆上——被垃圾回收掉
  4、强制的垃圾回收System.gc()
  实际上这里的强制,是程序员的建议,什么时候执行还是JVM的垃圾回收器说了算
参考技术A 不知道有没有单独释放的语句,但是java是自己释放的 参考技术B 没有,系统自动释放 参考技术C 垃圾回收(garbage collection,简称GC)可以自动清空堆中不再使用的对象。垃圾回收机制最早出现于1959年,被用于解决Lisp语言中的问题。垃圾回收是Java的一大特征。并不是所有的语言都有垃圾回收功能。比如在C/C++中,并没有垃圾回收的机制。程序员需要手动释放堆中的内存。
  由于不需要手动释放内存,程序员在编程中也可以减少犯错的机会。利用垃圾回收,程序员可以避免一些指针和内存泄露相关的bug(这一类bug通常很隐蔽)。但另一方面,垃圾回收需要耗费更多的计算时间。垃圾回收实际上是将原本属于程序员的责任转移给计算机。使用垃圾回收的程序需要更长的运行时间。
  在Java中,对象的是通过引用使用的(把对象相像成致命的毒物,引用就像是用于提取毒物的镊子)。如果不再有引用指向对象,那么程序员就再也无从调用或者处理该对象。这样的对象将不可到达(unreachable)。垃圾回收用于释放不可到达对象所占据的内存。这是垃圾回收的基本原则。
  (不可到达对象是死对象,是垃圾回收所要回收的垃圾)
  早期的垃圾回收采用引用计数(reference counting)的机制。每个对象包含一个计数器。当有新的指向该对象的引用时,计数器加1。当引用移除时,计数器减1。当计数器为0时,认为该对象可以进行垃圾回收。

  然而,一个可能的问题是,如果有两个对象循环引用(cyclicreference),比如两个对象互相引用,而且此时没有其它(指向A或者指向B)的引用,程序员实际上根本无法通过引用到达这两个对象。
  因此,程序员以栈和static数据为根(root),从根出发,跟随所有的引用,就可以找到所有的可到达对象。也就是说,一个可到达对象,一定被根引用,或者被其他可到达对象引用。
参考技术D 貌似没有吧,java好像已经全部都是智能指针的应用了,只申请,释放系统会自己做

以上是关于Java中有类似C++ 的delete ,free语句来释放资源吗的主要内容,如果未能解决你的问题,请参考以下文章

c的free和c++的delete的区别

C++—new/delete/malloc/free详解

C++ new/delete与 malloc/free

C 中的 free 和 C++ 中的 delete 之间的区别?

在 C++ 中,结构上的“new/delete”代替“malloc/free”有多好?

C++中delete与 delete []区别