Java String.format()是否存在内存泄漏

时间:2013-01-15 00:17:37

标签: java memory memory-leaks string.format

我在while循环中有这个语句,我注意到在windows任务管理器中,java app进程使用的内存不断增加,大约每秒几k。 String.format是否存在内存问题?

String str = String.format("%dDays %02d : %02d : %02d",days,hours,minutes,seconds);

3 个答案:

答案 0 :(得分:1)

如果你之后没有使用str,那只是垃圾收集器没有运行,所以尚未收集应该释放的内存。这可能是因为Java不需要它(因为它还有一些保留页面),因为Java在开始回收内存之前必须使用一定量的内存,因为运行垃圾收集器是一项昂贵的任务。

答案 1 :(得分:0)

我将假设您不保留对您创建的字符串的引用。

基本上,该调用每次运行时都会创建一个新对象。在Java虚拟机决定执行垃圾收集之前,这些对象仍保留在内存中。在确定有必要之前,JVM不会这样做。当您的内存使用超过某个阈值时,通常是必需的。该阈值取决于您的计算机以及启动JVM的设置。

答案 2 :(得分:0)

如果您执行以下操作应该会有所帮助:

String days = "Monday";
String hours = "10:00pm";
String minutes = "60";
String seconds = "01";

while(condition){
     String str = String.format("%dDays %02d : %02d : %02d",days,hours,minutes,seconds);
}

这会将引用传递给字符串,而不是为循环中每次迭代的每个字符串取32位。如果您无法帮助确定循环中的字符串,请尝试切换到字符或字节(如果可能),这将减少您使用的内存量。

如果你想强制垃圾收集器运行(非常不安全),请看这里

http://stackoverflow.com/questions/1481178/forcing-garbage-collection-in-java