comparison agent/src/share/classes/sun/jvm/hotspot/jdi/VirtualMachineImpl.java @ 5998:49036505ab5f

7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass. Summary: Change implementor to embedded instanceKlass field. Reviewed-by: sspitsyn, minqi, coleenp
author jiangli
date Thu, 29 Mar 2012 22:18:56 -0400
parents f6f3bb0ee072
children da91efe96a93
comparison
equal deleted inserted replaced
5970:0698f5ef5535 5998:49036505ab5f
1 /* 1 /*
2 * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
887 // ReferenceType or do we want objects of exact type only? 887 // ReferenceType or do we want objects of exact type only?
888 public List/*<ObjectReference>*/ objectsByType(ReferenceType type, boolean includeSubtypes) { 888 public List/*<ObjectReference>*/ objectsByType(ReferenceType type, boolean includeSubtypes) {
889 Klass kls = ((ReferenceTypeImpl)type).ref(); 889 Klass kls = ((ReferenceTypeImpl)type).ref();
890 if (kls instanceof InstanceKlass) { 890 if (kls instanceof InstanceKlass) {
891 InstanceKlass ik = (InstanceKlass) kls; 891 InstanceKlass ik = (InstanceKlass) kls;
892 if (ik.isInterface()) { 892 // if the Klass is final or if there are no subklasses loaded yet
893 if (ik.nofImplementors() == 0L) { 893 if (ik.getAccessFlagsObj().isFinal() || ik.getSubklassKlass() == null) {
894 return new ArrayList(0); 894 includeSubtypes = false;
895 }
896 } else {
897 // if the Klass is final or if there are no subklasses loaded yet
898 if (ik.getAccessFlagsObj().isFinal() || ik.getSubklassKlass() == null) {
899 includeSubtypes = false;
900 }
901 } 895 }
902 } else { 896 } else {
903 // no subtypes for primitive array types 897 // no subtypes for primitive array types
904 ArrayTypeImpl arrayType = (ArrayTypeImpl) type; 898 ArrayTypeImpl arrayType = (ArrayTypeImpl) type;
905 try { 899 try {