mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8185925: StackFrameInfo::walker field can be replaced with bitmap to save footprint
8153682: StackFrameInfo.declaringClass could be removed Reviewed-by: coleenp, mchung
This commit is contained in:
parent
09c2ca5809
commit
ac52bdcdd1
8 changed files with 42 additions and 43 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2017, 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
|
||||
|
@ -32,14 +32,12 @@ import java.lang.StackWalker.StackFrame;
|
|||
import java.lang.invoke.MethodType;
|
||||
|
||||
class StackFrameInfo implements StackFrame {
|
||||
private final byte RETAIN_CLASS_REF = 0x01;
|
||||
|
||||
private final static JavaLangInvokeAccess JLIA =
|
||||
SharedSecrets.getJavaLangInvokeAccess();
|
||||
|
||||
// Footprint improvement: MemberName::clazz can replace
|
||||
// StackFrameInfo::declaringClass.
|
||||
|
||||
private final StackWalker walker;
|
||||
private final Class<?> declaringClass;
|
||||
private final byte flags;
|
||||
private final Object memberName;
|
||||
private final short bci;
|
||||
private volatile StackTraceElement ste;
|
||||
|
@ -49,8 +47,7 @@ class StackFrameInfo implements StackFrame {
|
|||
* to use
|
||||
*/
|
||||
StackFrameInfo(StackWalker walker) {
|
||||
this.walker = walker;
|
||||
this.declaringClass = null;
|
||||
this.flags = walker.retainClassRef ? RETAIN_CLASS_REF : 0;
|
||||
this.bci = -1;
|
||||
this.memberName = JLIA.newMemberName();
|
||||
}
|
||||
|
@ -58,20 +55,20 @@ class StackFrameInfo implements StackFrame {
|
|||
// package-private called by StackStreamFactory to skip
|
||||
// the capability check
|
||||
Class<?> declaringClass() {
|
||||
return declaringClass;
|
||||
return JLIA.getDeclaringClass(memberName);
|
||||
}
|
||||
|
||||
// ----- implementation of StackFrame methods
|
||||
|
||||
@Override
|
||||
public String getClassName() {
|
||||
return declaringClass.getName();
|
||||
return declaringClass().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getDeclaringClass() {
|
||||
walker.ensureAccessEnabled(RETAIN_CLASS_REFERENCE);
|
||||
return declaringClass;
|
||||
ensureRetainClassRefEnabled();
|
||||
return declaringClass();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -81,7 +78,7 @@ class StackFrameInfo implements StackFrame {
|
|||
|
||||
@Override
|
||||
public MethodType getMethodType() {
|
||||
walker.ensureAccessEnabled(RETAIN_CLASS_REFERENCE);
|
||||
ensureRetainClassRefEnabled();
|
||||
return JLIA.getMethodType(memberName);
|
||||
}
|
||||
|
||||
|
@ -137,4 +134,10 @@ class StackFrameInfo implements StackFrame {
|
|||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
private void ensureRetainClassRefEnabled() {
|
||||
if ((flags & RETAIN_CLASS_REF) == 0) {
|
||||
throw new UnsupportedOperationException("No access to RETAIN_CLASS_REFERENCE");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue