java 怎么释放内存?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 怎么释放内存?相关的知识,希望对你有一定的参考价值。

CellControl cc = new CellControl(this.areaNumber.toString(),Integer.toString(i + 1),"1", this.con_id, this.conn);
strCode_temp = cc.returnCellCode(errAlert, contract, number,session);
上面这段 new了这个东西后只是执行了一个方法 然后实际上这个就没用了 但是这段代码是在一个循环至少100甚至1000+的for循环里 那昂一定会无限new吧 目前数据库的游标数执行一个大的表单的时候能达到100W次。。。 算来算去就是这里出问题。。。
只要能把这个new出来的释放掉 应该就可以了 谁知道咋释放 - -
能给说个简单方案吗? 或者网上介绍也好
我要想释放他 是不是
cc=null;gc();
这么写可以么?
你回答的还真快啊。。
那在我这个for循环结束之前并不会执行清理吧。。 变NULL可能也不好使 疯了

cc=null;就可以了。java 虚拟机会自己调用gc()方法去释放内存。

显示的调用System.gc()或Runtime.getRuntime().gc()也是可以的。调用了gc()并不会强制释放内存,虚拟机会尽最大努力从所有丢弃的对象中回收了空间。

参考资料:http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/System.html#gc()

参考技术A 的却是将对象指向null,然后再System.gc();不过你即使调用了gc也只是向java虚拟机发信号而已,具体何时执行得看jvm他老人家心情如何,更多Java引用释放方面的问题,参照

参考资料:http://zhidao.baidu.com/question/101070382.html

参考技术B JAVA里面有一个自动释放 内存机制 的,gc() 参考技术C 让其等于null或者gc()都可以! 参考技术D   垃圾回收(garbage collection,简称GC)可以自动清空堆中不再使用的对象。垃圾回收机制最早出现于1959年,被用于解决Lisp语言中的问题。垃圾回收是Java的一大特征。并不是所有的语言都有垃圾回收功能。比如在C/C++中,并没有垃圾回收的机制。程序员需要手动释放堆中的内存。
  由于不需要手动释放内存,程序员在编程中也可以减少犯错的机会。利用垃圾回收,程序员可以避免一些指针和内存泄露相关的bug(这一类bug通常很隐蔽)。但另一方面,垃圾回收需要耗费更多的计算时间。垃圾回收实际上是将原本属于程序员的责任转移给计算机。使用垃圾回收的程序需要更长的运行时间。
  在Java中,对象的是通过引用使用的(把对象相像成致命的毒物,引用就像是用于提取毒物的镊子)。如果不再有引用指向对象,那么程序员就再也无从调用或者处理该对象。这样的对象将不可到达(unreachable)。垃圾回收用于释放不可到达对象所占据的内存。这是垃圾回收的基本原则。
  (不可到达对象是死对象,是垃圾回收所要回收的垃圾)
  早期的垃圾回收采用引用计数(reference counting)的机制。每个对象包含一个计数器。当有新的指向该对象的引用时,计数器加1。当引用移除时,计数器减1。当计数器为0时,认为该对象可以进行垃圾回收。

  然而,一个可能的问题是,如果有两个对象循环引用(cyclicreference),比如两个对象互相引用,而且此时没有其它(指向A或者指向B)的引用,程序员实际上根本无法通过引用到达这两个对象。
  因此,程序员以栈和static数据为根(root),从根出发,跟随所有的引用,就可以找到所有的可到达对象。也就是说,一个可到达对象,一定被根引用,或者被其他可到达对象引用。

Java 内存分析显示异常的对象分配和释放

【中文标题】Java 内存分析显示异常的对象分配和释放【英文标题】:Java memory profiling shows unusual object allocation and deallocation 【发布时间】:2016-11-28 16:33:06 【问题描述】:

我正在对一个 java 应用程序进行内存分析。我也使用了 JVisualVM 工具。然而,它表明连续对象被分配和释放,尽管我的应用程序没有做任何重要的任务,如下图所示: -

谁能告诉我原因,java运行时环境在内部做什么进程,需要不断地分配和释放对象?

提前致谢。

【问题讨论】:

【参考方案1】:

这是一个正常的锯齿图案。 JVM 不是空闲的。很可能有后台线程在运行,连接到 JVisualVM 也需要资源。

【讨论】:

以上是关于java 怎么释放内存?的主要内容,如果未能解决你的问题,请参考以下文章

Java内存是怎么管理的

Java我可以主动去释放对象占的内存吗?可以的怎释放?

在sql server 2000中进行内存的自动释放怎么实现?拜托各位了 3Q

怎么将电脑内存释放出来?

怎么用new定义一个类数组,并且释放内存

cxf webservice 客户端调用内存溢出,内存不会自动释放,请问各位大侠是怎么解决的。