http://java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#79473
From the JVM spec section 5.3.3:
2. The Java virtual machine creates a new array class with the indicated component type and number of dimensions. If the
component type is a reference type, C is marked as having been defined by the defining class loader of the component type.
Otherwise, C is marked as having been defined by the bootstrap class loader. In any case, the Java virtual machine then
records that L is an initiating loader for C (§5.3.4). ...
The last sentence is clear that, for creation, all arrays have their initiating class loader marked. The prefacing sentence
indicates that the information is used and that it would be considered a creation since it is not already an initiating loader
of the array:
If L has already been recorded as an initiating loader of an array class with the same component type as N, that
class is C, and no array class creation is necessary Otherwise, the following steps are performed to create C:
JVMDI function GetClassLoaderClasses is defined:
Returns an array of all classes for which this class loader has been recorded as the initiating loader.
The related JVMDI function, GetLoadedClasses, is specific that primitive arrays are included:
Array classes of all types (including arrays of primitive types) are included in the returned list. Primitive
classes (for example, java.lang.Integer.TYPE) are not included in this list.
HotSpot build 1.4.0-beta-b61 does not return primitive arrays such as "int[]".
robert.field@Eng 2001-04-24
Note: this will indirectly cause the JDI methods:
Field.type()
Method.returnType()
Method.argumentTypes()?
LocalVariable.type()
others...?
to incorrectly throw ClassNotLoadedException.
robert.field@Eng 2001-04-27
From the JVM spec section 5.3.3:
2. The Java virtual machine creates a new array class with the indicated component type and number of dimensions. If the
component type is a reference type, C is marked as having been defined by the defining class loader of the component type.
Otherwise, C is marked as having been defined by the bootstrap class loader. In any case, the Java virtual machine then
records that L is an initiating loader for C (§5.3.4). ...
The last sentence is clear that, for creation, all arrays have their initiating class loader marked. The prefacing sentence
indicates that the information is used and that it would be considered a creation since it is not already an initiating loader
of the array:
If L has already been recorded as an initiating loader of an array class with the same component type as N, that
class is C, and no array class creation is necessary Otherwise, the following steps are performed to create C:
JVMDI function GetClassLoaderClasses is defined:
Returns an array of all classes for which this class loader has been recorded as the initiating loader.
The related JVMDI function, GetLoadedClasses, is specific that primitive arrays are included:
Array classes of all types (including arrays of primitive types) are included in the returned list. Primitive
classes (for example, java.lang.Integer.TYPE) are not included in this list.
HotSpot build 1.4.0-beta-b61 does not return primitive arrays such as "int[]".
robert.field@Eng 2001-04-24
Note: this will indirectly cause the JDI methods:
Field.type()
Method.returnType()
Method.argumentTypes()?
LocalVariable.type()
others...?
to incorrectly throw ClassNotLoadedException.
robert.field@Eng 2001-04-27
- duplicates
-
JDK-4359312 jdi: LocalVariable.type().signature() on array type: ClassNotLoadedException
- Closed
- relates to
-
JDK-5093520 objects being kept alive in perm gen and old gen when debugger attached
- Resolved
-
JDK-4359628 JDI: methods Accessible.is...() lie about array types
- Closed
-
JDK-4451941 JDWP: Evaluating method call with primitive array parameter gives Unexpected Sig
- Closed
-
JDK-6579119 "ClassNotLoadedException: Type int[][] not loaded" when access type of local variable
- Closed