Java如何高效地管理内存

Java如何高效地管理内存,java,string,Java,String,字符串在java中是不可变的,即每次我们对字符串对象进行更改时,它都会创建一个新的实例,而旧的对象会变得不可引用,即浪费。因此,在一个大程序中,会有很多无法访问的未引用对象。java管理这个吗?怎样? 例如— String s="abc"; s=s.concat("def"); 现在反对“abc”完全不能被引用,但由于字符串是不可变的,它仍将存在于内存池中。Java有自动垃圾回收器,它在后台运行。该垃圾回收器不断检查未使用的对象,一旦检测到/找到任何此类对象,它就会将其销毁,即释放该特定对象使

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

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

现在反对“abc”完全不能被引用,但由于字符串是不可变的,它仍将存在于内存池中。

Java有自动垃圾回收器,它在后台运行。该垃圾回收器不断检查未使用的对象,一旦检测到/找到任何此类对象,它就会将其销毁,即释放该特定对象使用的内存/资源对象。这由JVM负责,所以您不必担心。但是,如果您愿意,可以指示JVM进行垃圾收集。之后,JVM可以相应地安排垃圾收集

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


首先,听起来您需要Java和垃圾收集中的崩溃源。话虽如此,有几点需要澄清:

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

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


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

java中的内存管理是由JVM完成的,即JVM中的垃圾收集器

当所有对象都有引用时,它们都存储在堆中

MyCode ref=new MyCode();
垃圾收集器在两种情况下验证该对象以进行垃圾收集

  • 如果对对象的引用变为null
  • 当孤岛发生时

  • 内存管理是关于字符串对象的一些不同之处,上面的答案已经解释过了

    java管理这个吗?
    -当然<代码>如何处理?-我们不需要知道细节,但垃圾收集器会处理它。这是垃圾收集器的目的和工作。除非它真的存在内存问题,否则您不应该关注它。如果运行内存问题,最好分析应用程序以检测内存消耗的原因。和的可能重复
    ref=null;