Java 这段代码会创建比I';你明确创建了什么?
据我所知,我只创建了两个字符串类型的对象,但我对我的java内存管理知识不是很有信心。顺便说一句,Java 这段代码会创建比I';你明确创建了什么?,java,memory-management,memory-leaks,jvm,Java,Memory Management,Memory Leaks,Jvm,据我所知,我只创建了两个字符串类型的对象,但我对我的java内存管理知识不是很有信心。顺便说一句,shouldlrun总是正确的,这个线程负责收集与之共享JVM的应用程序的一些性能数据 我已经更新了代码,此线程的目的是保持运行并测量(尝试)安全点暂停。无法判断,因为您发布的代码没有明确范围 通常我认为开始和结束时间都很长,而不是字符串。在这种形式下没有用处;例如,无法计算持续时间 垃圾回收器会自动清理您使用完的所有内存(除非您做了一些让垃圾回收器感到困惑的事情,例如保留不需要的引用) 在本例末尾
shouldlrun
总是正确的,这个线程负责收集与之共享JVM的应用程序的一些性能数据
我已经更新了代码,此线程的目的是保持运行并测量(
尝试
)安全点暂停。无法判断,因为您发布的代码没有明确范围
通常我认为开始和结束时间都很长,而不是字符串。在这种形式下没有用处;例如,无法计算持续时间 垃圾回收器会自动清理您使用完的所有内存(除非您做了一些让垃圾回收器感到困惑的事情,例如保留不需要的引用)
在本例末尾,您有两个
String
引用,您已经创建了两个字符串并将它们放在这些引用中。任何其他使用过的东西都会为您整理。为什么它会“泄漏内存”?Java使用垃圾收集器,“内存泄漏”是指你保留不需要的对象,你根本不需要循环中的格式化时间。在事前和事后制作它们。
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
}