Mon, 20 Feb 2012 21:27:56 -0800
7145358: SA throws ClassCastException for partially loaded ConstantPool
Summary: In printValueOn() in ConstantPool.java check if the poolHolder is a valid Klass and only then print it.
Reviewed-by: sla, sspitsyn
Contributed-by: Krystal Mok <sajia@taobao.com>
agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java | file | annotate | diff | comparison | revisions |
1.1 --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java Sun Feb 19 13:11:39 2012 +0100 1.2 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java Mon Feb 20 21:27:56 2012 -0800 1.3 @@ -648,7 +648,12 @@ 1.4 } 1.5 1.6 public void printValueOn(PrintStream tty) { 1.7 - tty.print("ConstantPool for " + getPoolHolder().getName().asString()); 1.8 + Oop holder = poolHolder.getValue(this); 1.9 + if (holder instanceof Klass) { 1.10 + tty.print("ConstantPool for " + ((Klass)holder).getName().asString()); 1.11 + } else { 1.12 + tty.print("ConstantPool for partially loaded class"); 1.13 + } 1.14 } 1.15 1.16 public long getObjectSize() {