8242898: Clean up InstanceKlass::_array_klasses

Make type ObjArrayKlass

Reviewed-by: dholmes, iklam
This commit is contained in:
Coleen Phillimore 2020-04-30 06:05:53 -04:00
parent 68e53065e0
commit 3153373e49
6 changed files with 20 additions and 23 deletions

View file

@ -1378,14 +1378,14 @@ Klass* InstanceKlass::array_klass_impl(bool or_null, int n, TRAPS) {
// Check if update has already taken place
if (array_klasses() == NULL) {
Klass* k = ObjArrayKlass::allocate_objArray_klass(class_loader_data(), 1, this, CHECK_NULL);
ObjArrayKlass* k = ObjArrayKlass::allocate_objArray_klass(class_loader_data(), 1, this, CHECK_NULL);
// use 'release' to pair with lock-free load
release_set_array_klasses(k);
}
}
}
// _this will always be set at this point
ObjArrayKlass* oak = (ObjArrayKlass*)array_klasses();
ObjArrayKlass* oak = array_klasses();
if (or_null) {
return oak->array_klass_or_null(n);
}
@ -1624,12 +1624,12 @@ void InstanceKlass::do_nonstatic_fields(FieldClosure* cl) {
void InstanceKlass::array_klasses_do(void f(Klass* k, TRAPS), TRAPS) {
if (array_klasses() != NULL)
ArrayKlass::cast(array_klasses())->array_klasses_do(f, THREAD);
array_klasses()->array_klasses_do(f, THREAD);
}
void InstanceKlass::array_klasses_do(void f(Klass* k)) {
if (array_klasses() != NULL)
ArrayKlass::cast(array_klasses())->array_klasses_do(f);
array_klasses()->array_klasses_do(f);
}
#ifdef ASSERT
@ -2512,7 +2512,7 @@ void InstanceKlass::restore_unshareable_info(ClassLoaderData* loader_data, Handl
if (array_klasses() != NULL) {
// Array classes have null protection domain.
// --> see ArrayKlass::complete_create_array_klass()
ArrayKlass::cast(array_klasses())->restore_unshareable_info(ClassLoaderData::the_null_class_loader_data(), Handle(), CHECK);
array_klasses()->restore_unshareable_info(ClassLoaderData::the_null_class_loader_data(), Handle(), CHECK);
}
// Initialize current biased locking state.
@ -3714,9 +3714,6 @@ void InstanceKlass::verify_on(outputStream* st) {
}
// Verify other fields
if (array_klasses() != NULL) {
guarantee(array_klasses()->is_klass(), "should be klass");
}
if (constants() != NULL) {
guarantee(constants()->is_constantPool(), "should be constant pool");
}

View file

@ -170,7 +170,7 @@ class InstanceKlass: public Klass {
// Package this class is defined in
PackageEntry* _package_entry;
// Array classes holding elements of this class.
Klass* volatile _array_klasses;
ObjArrayKlass* volatile _array_klasses;
// Constant pool for this class.
ConstantPool* _constants;
// The InnerClasses attribute and EnclosingMethod attribute. The
@ -390,10 +390,10 @@ class InstanceKlass: public Klass {
void set_itable_length(int len) { _itable_len = len; }
// array klasses
Klass* array_klasses() const { return _array_klasses; }
inline Klass* array_klasses_acquire() const; // load with acquire semantics
void set_array_klasses(Klass* k) { _array_klasses = k; }
inline void release_set_array_klasses(Klass* k); // store with release semantics
ObjArrayKlass* array_klasses() const { return _array_klasses; }
inline ObjArrayKlass* array_klasses_acquire() const; // load with acquire semantics
void set_array_klasses(ObjArrayKlass* k) { _array_klasses = k; }
inline void release_set_array_klasses(ObjArrayKlass* k); // store with release semantics
// methods
Array<Method*>* methods() const { return _methods; }

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2020, 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
@ -34,11 +34,11 @@
#include "utilities/globalDefinitions.hpp"
#include "utilities/macros.hpp"
inline Klass* InstanceKlass::array_klasses_acquire() const {
inline ObjArrayKlass* InstanceKlass::array_klasses_acquire() const {
return Atomic::load_acquire(&_array_klasses);
}
inline void InstanceKlass::release_set_array_klasses(Klass* k) {
inline void InstanceKlass::release_set_array_klasses(ObjArrayKlass* k) {
Atomic::release_store(&_array_klasses, k);
}

View file

@ -54,7 +54,7 @@ ObjArrayKlass* ObjArrayKlass::allocate(ClassLoaderData* loader_data, int n, Klas
return new (loader_data, size, THREAD) ObjArrayKlass(n, k, name);
}
Klass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_data,
ObjArrayKlass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_data,
int n, Klass* element_klass, TRAPS) {
// Eagerly allocate the direct array supertype.
@ -88,7 +88,7 @@ Klass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_data,
// Now retry from the beginning
ek = element_klass->array_klass(n, CHECK_NULL);
} // re-lock
return ek;
return ObjArrayKlass::cast(ek);
}
} else {
// The element type is already Object. Object[] has direct super of Object.

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2020, 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
@ -74,7 +74,7 @@ class ObjArrayKlass : public ArrayKlass {
int oop_size(oop obj) const;
// Allocation
static Klass* allocate_objArray_klass(ClassLoaderData* loader_data,
static ObjArrayKlass* allocate_objArray_klass(ClassLoaderData* loader_data,
int n, Klass* element_klass, TRAPS);
objArrayOop allocate(int length, TRAPS);

View file

@ -218,7 +218,7 @@ typedef HashtableEntry<InstanceKlass*, mtClass> KlassHashtableEntry;
nonstatic_field(ConstantPoolCache, _reference_map, Array<u2>*) \
nonstatic_field(ConstantPoolCache, _length, int) \
nonstatic_field(ConstantPoolCache, _constant_pool, ConstantPool*) \
volatile_nonstatic_field(InstanceKlass, _array_klasses, Klass*) \
volatile_nonstatic_field(InstanceKlass, _array_klasses, ObjArrayKlass*) \
nonstatic_field(InstanceKlass, _methods, Array<Method*>*) \
nonstatic_field(InstanceKlass, _default_methods, Array<Method*>*) \
nonstatic_field(InstanceKlass, _local_interfaces, Array<InstanceKlass*>*) \