繁体   English   中英

Java如何有效地管理内存

[英]How Java manage memory efficiently

字符串在java中是不可变的,即每次我们在字符串对象中进行更改时,它都会创建一个新实例,而旧对象则变为未引用,即浪费。 所以在一个大程序中会有很多无法访问的未引用对象。 java管理这个吗? 怎么样? 例如-

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

现在对象“abc”根本无法引用,但由于字符串是不可变的,它仍然存在于内存池中。

首先,听起来你需要Java和垃圾收集中的崩溃源。 话虽如此,还有一些基本要点需要澄清:

1)仅仅因为一个对象是不可变的并不意味着它的内存泄漏。 如果对不可变对象没有引用,则它与任何其他对象一样有资格进行垃圾回收。

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

3)这些字符串占用的内存量非常小,您基本上不必担心它。

Java有自动垃圾收集器,它继续在后台运行。这个垃圾收集器不断检查未使用的对象,一旦它检测到/找到任何这样的对象就会销毁它,即释放该特定对象使用的内存/资源。这是由JVM照顾的。你不用担心它。但是如果你想要你可以指示JVM进行垃圾收集。之后JVM可以相应地安排垃圾收集

要了解垃圾收集的工作原理,请查看以下链接:

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

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

Java中的内存管理由JVM(即JVM中的垃圾收集器)完成

所有对象在引用时都存储在堆中

MyCode ref=new MyCode();

垃圾收集器在两种情况下验证垃圾收集的对象

  1. 如果对象的引用变为null
ref=null;
  1. 当隔离岛发生时

http://www.geeksforgeeks.org/island-of-isolation-in-java/

内存管理是关于String对象的一些不同,如上面的答案已经解释过它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM