2013-10-24 45 views
0

字符串是在Java中,即我们每一个字符串对象的变化它会创建一个新的实例和旧的对象成为未引用即浪费时间不变。所以在一个大程序中会有很多无法访问的未引用对象。 Java是否管理这个?怎么样? 的示例 -的Java如何管理内存的有效

String s="abc"; 
s=s.concat("def"); 

现在反对“ABC”不能在所有被引用但字符串是不可变的它会在内存池中依然存在。

+0

'java是否管理这个?' - 当然。 “怎么?' - 我们不需要知道细节,但垃圾收集器会照顾它。 – camickr

+2

这就是垃圾收集器的目的和工作。除非确实存在内存问题,否则您不应该关注此问题。如果你运行内存问题,最好将应用程序分析以检测内存消耗的罪魁祸首。 –

+0

http://stackoverflow.com/questions/2486191/java-string-pool可能的重复和http://stackoverflow.com/questions/8998717/how-does-java-handle-string-objects-in-memory/ 8998814#8998814 –

回答

2

首先,这听起来像你需要在Java和垃圾收集崩溃源。随着中说,有几个基本点清理:

1)仅仅因为一个对象是不可改变的,并不意味着它的内存泄漏。如果不存在对不可变对象的引用,则它与其他对象一样适用于垃圾回收。

2)字符串常量是一个例外,因为它们总是由JVM执行实现。这意味着字符串常量保存在一个特殊的内存池中,并且每当创建一个字符串时,都会首先检查该池是否已经存在。如果是,则返回对其的引用。 (您可以使用String.intern()方法强制非常量字符串加入池中)。

3)内存这些字符串占用量是微乎其微的,你应该永远基本上不用担心了。

1

Java提供了自动垃圾收集器,其保持在background.This垃圾收集器运行继续检查未使用的对象,一旦检测/找到任何对象,它摧毁它即释放由特定object.This使用的内存/资源取由JVM关心,所以你如果需要,您可以指示JVM做垃圾回收。之后JVM可以安排垃圾收集相应

要知道垃圾收集是如何工作的检查下面的链接,不用担心it.However:

http://javarevisited.blogspot.in/2011/04/garbage-collection-in-java.html

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

0

java中的内存管理由JVM i完成。在JVMë垃圾收集

所有对象存储在堆时,他们有像

MyCode ref=new MyCode(); 

垃圾收集器参考验证用于垃圾收集该对象在两种情况下

  1. 如果参照对象变为空
ref=null; 
  • 当隔离岛发生
  • http://www.geeksforgeeks.org/island-of-isolation-in-java/

    内存管理是一些什么不同的关于String对象如上答案已经解释