性能对java.lang.Runtime频繁调用totalMemory()/ freeMemory()的影响?

时间:2010-08-04 18:48:39

标签: java performance

我必须经常检查应用程序的内存使用情况 - 使用java.lang.Runtime.freeMemory()/ java.lang.Runtime.totalMemory()

每60秒做一次。

如果我按照上述说法每隔5秒钟做一次会有什么影响呢?

(希望不像System.gc()那样)

该应用程序在Linux / Solaris / Windows / HP-UX / AIX等上运行

2 个答案:

答案 0 :(得分:2)

测试并查看。如果您无法构建导致性能指标显着下降的测试,那么我保证您的用户也不会注意到它。

直觉:不应该是一个问题。现在,一个持续监控其内存的应用程序是否具有良好的设计......这是另一个问题。

答案 1 :(得分:1)

我在openjdk jvm.cpp

中追踪了它
JVM_ENTRY_NO_ENV(jlong, JVM_TotalMemory(void))
  JVMWrapper("JVM_TotalMemory");
  size_t n = Universe::heap()->capacity();
  return convert_size_t_to_jlong(n);
JVM_END

搜索Universe的实现导致

public CollectedHeap heap() {
    try {
      return (CollectedHeap) heapConstructor.instantiateWrapperFor(collectedHeapField.getValue());
    } catch (WrongTypeException e) {
      return new CollectedHeap(collectedHeapField.getValue());
    }
  }

Oops CollectedHeap是一个界面...因此我得出结论mark-peters'测试并看到'最好。