Mercurial > hg > icedtea8-forest > hotspot
changeset 10832:49dcf5b44dcb
8231209: [REDO] ThreadMXBean::getThreadAllocatedBytes() can be quicker for self thread
Summary: Add com.sun.management.getCurrentThreadAllocatedBytes, implement getThreadAllocatedBytes(long) independent of getThreadAllocatedBytes(long[])
Reviewed-by: mchung, dholmes, sspitsyn
author | phh |
---|---|
date | Wed, 25 Sep 2019 15:22:33 -0700 |
parents | 04b1e9e7509d |
children | 0277358b8fc2 |
files | src/share/vm/services/jmm.h src/share/vm/services/management.cpp |
diffstat | 2 files changed, 31 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/services/jmm.h Thu Sep 24 13:19:11 2020 +0200 +++ b/src/share/vm/services/jmm.h Wed Sep 25 15:22:33 2019 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -219,7 +219,9 @@ typedef struct jmmInterface_1_ { void* reserved1; - void* reserved2; + jlong (JNICALL *GetOneThreadAllocatedMemory) + (JNIEnv *env, + jlong thread_id); jint (JNICALL *GetVersion) (JNIEnv *env);
--- a/src/share/vm/services/management.cpp Thu Sep 24 13:19:11 2020 +0200 +++ b/src/share/vm/services/management.cpp Wed Sep 25 15:22:33 2019 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -2232,6 +2232,31 @@ } #endif // INCLUDE_MANAGEMENT +// Gets the amount of memory allocated on the Java heap for a single thread. +// Returns -1 if the thread does not exist or has terminated. +JVM_ENTRY(jlong, jmm_GetOneThreadAllocatedMemory(JNIEnv *env, jlong thread_id)) + if (thread_id < 0) { + THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), + "Invalid thread ID", -1); + } + + if (thread_id == 0) { + // current thread + if (THREAD->is_Java_thread()) { + return ((JavaThread*)THREAD)->cooked_allocated_bytes(); + } + return -1; + } + + MutexLockerEx ml(Threads_lock); + JavaThread* java_thread = Threads::find_java_thread_from_java_tid(thread_id); + + if (java_thread != NULL) { + return java_thread->cooked_allocated_bytes(); + } + return -1; +JVM_END + // Gets an array containing the amount of memory allocated on the Java // heap for a set of threads (in bytes). Each element of the array is // the amount of memory allocated for the thread ID specified in the @@ -2348,7 +2373,7 @@ #if INCLUDE_MANAGEMENT const struct jmmInterface_1_ jmm_interface = { NULL, - NULL, + jmm_GetOneThreadAllocatedMemory, jmm_GetVersion, jmm_GetOptionalSupport, jmm_GetInputArguments,