aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjbachorik <none@none>2013-11-10 20:05:03 +0100
committerjbachorik <none@none>2013-11-10 20:05:03 +0100
commita7cc6ffd1f98a047e5a2e81ad0a83c6cefc8c38c (patch)
treeab4c5d9146203a12ce865d5716a2dfb58f7742e0 /src
parentc9c5be50924178d2a2b687cbfb6551f8bc254f82 (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.java7
-rw-r--r--src/share/classes/sun/management/VMManagement.java1
-rw-r--r--src/share/classes/sun/management/VMManagementImpl.java5
-rw-r--r--src/share/javavm/export/jmm.h1
-rw-r--r--src/share/native/sun/management/VMManagementImpl.c7
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)