diff options
author | jbachorik <none@none> | 2013-11-10 20:05:03 +0100 |
---|---|---|
committer | jbachorik <none@none> | 2013-11-10 20:05:03 +0100 |
commit | a7cc6ffd1f98a047e5a2e81ad0a83c6cefc8c38c (patch) | |
tree | ab4c5d9146203a12ce865d5716a2dfb58f7742e0 /src | |
parent | c9c5be50924178d2a2b687cbfb6551f8bc254f82 (diff) |
6523160: RuntimeMXBean.getUptime() returns negative values
Summary: RuntimeMXBean.getUptime() should be based on HR timers rather than on the OS time
Reviewed-by: dholmes, sla
Diffstat (limited to 'src')
-rw-r--r-- | src/share/classes/sun/management/RuntimeImpl.java | 7 | ||||
-rw-r--r-- | src/share/classes/sun/management/VMManagement.java | 1 | ||||
-rw-r--r-- | src/share/classes/sun/management/VMManagementImpl.java | 5 | ||||
-rw-r--r-- | src/share/javavm/export/jmm.h | 1 | ||||
-rw-r--r-- | src/share/native/sun/management/VMManagementImpl.c | 7 |
5 files changed, 15 insertions, 6 deletions
diff --git a/src/share/classes/sun/management/RuntimeImpl.java b/src/share/classes/sun/management/RuntimeImpl.java index 2e947cc03..c0abdb744 100644 --- a/src/share/classes/sun/management/RuntimeImpl.java +++ b/src/share/classes/sun/management/RuntimeImpl.java @@ -110,12 +110,7 @@ class RuntimeImpl implements RuntimeMXBean { } public long getUptime() { - long current = System.currentTimeMillis(); - - // TODO: If called from client side when we support - // MBean proxy to read performance counters from shared memory, - // need to check if the monitored VM exitd. - return (current - vmStartupTime); + return jvm.getUptime(); } public long getStartTime() { diff --git a/src/share/classes/sun/management/VMManagement.java b/src/share/classes/sun/management/VMManagement.java index a02f828ed..f4445f022 100644 --- a/src/share/classes/sun/management/VMManagement.java +++ b/src/share/classes/sun/management/VMManagement.java @@ -71,6 +71,7 @@ public interface VMManagement { public String getBootClassPath(); public List<String> getVmArguments(); public long getStartupTime(); + public long getUptime(); public int getAvailableProcessors(); // Compilation Subsystem diff --git a/src/share/classes/sun/management/VMManagementImpl.java b/src/share/classes/sun/management/VMManagementImpl.java index 46e0285e6..c5d050542 100644 --- a/src/share/classes/sun/management/VMManagementImpl.java +++ b/src/share/classes/sun/management/VMManagementImpl.java @@ -179,6 +179,10 @@ class VMManagementImpl implements VMManagement { return result; } + public long getUptime() { + return getUptime0(); + } + private List<String> vmArgs = null; public synchronized List<String> getVmArguments() { if (vmArgs == null) { @@ -192,6 +196,7 @@ class VMManagementImpl implements VMManagement { public native String[] getVmArguments0(); public native long getStartupTime(); + private native long getUptime0(); public native int getAvailableProcessors(); // Compilation Subsystem diff --git a/src/share/javavm/export/jmm.h b/src/share/javavm/export/jmm.h index e017e5a02..3f938e250 100644 --- a/src/share/javavm/export/jmm.h +++ b/src/share/javavm/export/jmm.h @@ -78,6 +78,7 @@ typedef enum { JMM_COMPILE_TOTAL_TIME_MS = 8, /* Total accumulated time spent in compilation */ JMM_GC_TIME_MS = 9, /* Total accumulated time spent in collection */ JMM_GC_COUNT = 10, /* Total number of collections */ + JMM_JVM_UPTIME_MS = 11, /* The JVM uptime in milliseconds */ JMM_INTERNAL_ATTRIBUTE_INDEX = 100, JMM_CLASS_LOADED_BYTES = 101, /* Number of bytes loaded instance classes */ diff --git a/src/share/native/sun/management/VMManagementImpl.c b/src/share/native/sun/management/VMManagementImpl.c index 27784e5dd..1aa09d2c4 100644 --- a/src/share/native/sun/management/VMManagementImpl.c +++ b/src/share/native/sun/management/VMManagementImpl.c @@ -200,6 +200,13 @@ Java_sun_management_VMManagementImpl_getStartupTime JMM_JVM_INIT_DONE_TIME_MS); } +JNIEXPORT jlong JNICALL +Java_sun_management_VMManagementImpl_getUptime0 + (JNIEnv *env, jobject dummy) +{ + return jmm_interface->GetLongAttribute(env, NULL, JMM_JVM_UPTIME_MS); +} + JNIEXPORT jboolean JNICALL Java_sun_management_VMManagementImpl_isThreadContentionMonitoringEnabled (JNIEnv *env, jobject dummy) |