在Java内存中,分配给字符串缓冲区的内存未被清除

在Java内存中,分配给字符串缓冲区的内存未被清除,java,jvm,Java,Jvm,分配给字符串缓冲区的内存没有被清除,即使我们这样做了 stringbuffer.delete(0,Stringbuffer.length()); stringbuffer = null; System.gc(); 删除分配给字符串缓冲区的全部内存的任何建议。您无法控制Java内存管理。甚至通过调用System.gc()。通过调用System.gc(),您只能建议JVM收集垃圾,但不能强制释放内存 Java将仅根据其算法收集垃圾内存 System.gc()javadoc说 调用gc方法意味着Ja

分配给字符串缓冲区的内存没有被清除,即使我们这样做了

stringbuffer.delete(0,Stringbuffer.length());
stringbuffer = null;
System.gc();

删除分配给字符串缓冲区的全部内存的任何建议。

您无法控制Java内存管理。甚至通过调用
System.gc()
。通过调用
System.gc()
,您只能建议JVM收集垃圾,但不能强制释放内存 Java将仅根据其算法收集垃圾内存

System.gc()
javadoc说

调用gc方法意味着Java虚拟机需要 努力回收未使用的对象,以使内存 它们目前可用于快速重用。当控件返回时 从方法调用来看,Java虚拟机已经尽了最大的努力 从所有丢弃的对象中回收空间


来源:-

当gc运行时,如果没有对它的引用,它将清除内存。你怎么知道内存没有被清除?可能是从什么中删除的副本?它应该在你的内存芯片上打个洞吗?垃圾收集器将使RAM可用于其他对象,而不是对其进行修改。只要没有人将内存用于其他目的,它就可以保留其旧内容。这也适用于手动内存释放的其他编程语言。StringBuilder.delete()不会释放任何内存。不在任何地方使用stringBuilder可用于清理。顺便说一句,如果可以,请不要使用StringBuffer,因为它在十多年前被StringBuilder取代。“分配给字符串缓冲区的内存没有被清除”你怎么知道?