mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8150778: Reduce Throwable.getStackTrace() calls to the JVM
Replace JVM_GetStackTraceDepth and JVM_GetStackTraceElement, with JVM_GetStackTraceElements that gets all the elements in the StackTraceElement[] Reviewed-by: shade, mchung, dholmes, hseigel
This commit is contained in:
parent
fc407c943e
commit
4a05d83db0
9 changed files with 312 additions and 163 deletions
|
@ -440,6 +440,7 @@ class java_lang_ThreadGroup : AllStatic {
|
|||
|
||||
class java_lang_Throwable: AllStatic {
|
||||
friend class BacktraceBuilder;
|
||||
friend class BacktraceIterator;
|
||||
|
||||
private:
|
||||
// Offsets
|
||||
|
@ -465,16 +466,12 @@ class java_lang_Throwable: AllStatic {
|
|||
|
||||
static int backtrace_offset;
|
||||
static int detailMessage_offset;
|
||||
static int cause_offset;
|
||||
static int stackTrace_offset;
|
||||
static int depth_offset;
|
||||
static int static_unassigned_stacktrace_offset;
|
||||
|
||||
// Printing
|
||||
static char* print_stack_element_to_buffer(Handle mirror, int method, int version, int bci, int cpref);
|
||||
// StackTrace (programmatic access, new since 1.4)
|
||||
static void clear_stacktrace(oop throwable);
|
||||
// No stack trace available
|
||||
static const char* no_stack_trace_message();
|
||||
// Stacktrace (post JDK 1.7.0 to allow immutability protocol to be followed)
|
||||
static void set_stacktrace(oop throwable, oop st_element_array);
|
||||
static oop unassigned_stacktrace();
|
||||
|
@ -483,19 +480,20 @@ class java_lang_Throwable: AllStatic {
|
|||
// Backtrace
|
||||
static oop backtrace(oop throwable);
|
||||
static void set_backtrace(oop throwable, oop value);
|
||||
static int depth(oop throwable);
|
||||
static void set_depth(oop throwable, int value);
|
||||
// Needed by JVMTI to filter out this internal field.
|
||||
static int get_backtrace_offset() { return backtrace_offset;}
|
||||
static int get_detailMessage_offset() { return detailMessage_offset;}
|
||||
// Message
|
||||
static oop message(oop throwable);
|
||||
static oop message(Handle throwable);
|
||||
static void set_message(oop throwable, oop value);
|
||||
static Symbol* detail_message(oop throwable);
|
||||
static void print_stack_element(outputStream *st, Handle mirror, int method,
|
||||
int version, int bci, int cpref);
|
||||
static void print_stack_element(outputStream *st, const methodHandle& method, int bci);
|
||||
static void print_stack_usage(Handle stream);
|
||||
|
||||
static void compute_offsets();
|
||||
|
||||
// Allocate space for backtrace (created but stack trace not filled in)
|
||||
static void allocate_backtrace(Handle throwable, TRAPS);
|
||||
// Fill in current stack trace for throwable with preallocated backtrace (no GC)
|
||||
|
@ -504,8 +502,7 @@ class java_lang_Throwable: AllStatic {
|
|||
static void fill_in_stack_trace(Handle throwable, const methodHandle& method, TRAPS);
|
||||
static void fill_in_stack_trace(Handle throwable, const methodHandle& method = methodHandle());
|
||||
// Programmatic access to stack trace
|
||||
static oop get_stack_trace_element(oop throwable, int index, TRAPS);
|
||||
static int get_stack_trace_depth(oop throwable, TRAPS);
|
||||
static void get_stack_trace_elements(Handle throwable, objArrayHandle stack_trace, TRAPS);
|
||||
// Printing
|
||||
static void print(Handle throwable, outputStream* st);
|
||||
static void print_stack_trace(Handle throwable, outputStream* st);
|
||||
|
@ -1277,17 +1274,19 @@ class java_lang_StackTraceElement: AllStatic {
|
|||
static int fileName_offset;
|
||||
static int lineNumber_offset;
|
||||
|
||||
public:
|
||||
// Setters
|
||||
static void set_declaringClass(oop element, oop value);
|
||||
static void set_methodName(oop element, oop value);
|
||||
static void set_fileName(oop element, oop value);
|
||||
static void set_lineNumber(oop element, int value);
|
||||
|
||||
public:
|
||||
// Create an instance of StackTraceElement
|
||||
static oop create(Handle mirror, int method, int version, int bci, int cpref, TRAPS);
|
||||
static oop create(const methodHandle& method, int bci, TRAPS);
|
||||
|
||||
static void fill_in(Handle element, InstanceKlass* holder, const methodHandle& method,
|
||||
int version, int bci, int cpref, TRAPS);
|
||||
|
||||
// Debugging
|
||||
friend class JavaClasses;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue