这个代码会创建比我明确创建的对象更多的对象吗?

时间:2014-02-23 23:22:45

标签: java memory-management memory-leaks jvm

String startTime, endTime;
startTime = simpleDateFormat.format(Calendar.getInstance(TimeZone.getTimeZone(UTC_TIMEZONE)).getTime()); 
long time1 = System.nanoTime();

while (shouldRun) {
   endTime = simpleDateFormat.format(Calendar.getInstance(TimeZone.getTimeZone(UTC_TIMEZONE)).getTime());

   long time2 = System.nanoTime();
   long pause = time2 - time1;

   if (pause > threshold) {
       LOG.info("Delay : {} ", pause);
   }

   time1 = time2;
   startTime = endTime
}

根据我的理解,我只创建了2个String类型的对象,但我对我的java内存管理知识不太自信。顺便说一句,shouldRun总是正确的,这个线程负责收集有关与它共享JVM的应用程序的一些性能数据。

我已更新代码,此主题的目的是继续运行并测量(try to)SafePoint暂停。

2 个答案:

答案 0 :(得分:0)

这是不可能的,因为您发布的代码不会使范围明确。

通常我会看到开始和结束时间长,而不是String。在这种形式下没用;例如,无法计算持续时间。

答案 1 :(得分:0)

你完成使用的任何内存都会被垃圾收集器自动清理(除非你做了让垃圾收集器混淆的事情,比如保持你不需要的引用)。

在此示例的末尾,您有两个String引用,您已创建了两个字符串并将它们放在这些引用中。任何其他用过的东西都会为你整理。