mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8242898: Clean up InstanceKlass::_array_klasses
Make type ObjArrayKlass Reviewed-by: dholmes, iklam
This commit is contained in:
parent
68e53065e0
commit
3153373e49
6 changed files with 20 additions and 23 deletions
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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*>*) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue