mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +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
|
// Check if update has already taken place
|
||||||
if (array_klasses() == NULL) {
|
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
|
// use 'release' to pair with lock-free load
|
||||||
release_set_array_klasses(k);
|
release_set_array_klasses(k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// _this will always be set at this point
|
// _this will always be set at this point
|
||||||
ObjArrayKlass* oak = (ObjArrayKlass*)array_klasses();
|
ObjArrayKlass* oak = array_klasses();
|
||||||
if (or_null) {
|
if (or_null) {
|
||||||
return oak->array_klass_or_null(n);
|
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) {
|
void InstanceKlass::array_klasses_do(void f(Klass* k, TRAPS), TRAPS) {
|
||||||
if (array_klasses() != NULL)
|
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)) {
|
void InstanceKlass::array_klasses_do(void f(Klass* k)) {
|
||||||
if (array_klasses() != NULL)
|
if (array_klasses() != NULL)
|
||||||
ArrayKlass::cast(array_klasses())->array_klasses_do(f);
|
array_klasses()->array_klasses_do(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
|
@ -2512,7 +2512,7 @@ void InstanceKlass::restore_unshareable_info(ClassLoaderData* loader_data, Handl
|
||||||
if (array_klasses() != NULL) {
|
if (array_klasses() != NULL) {
|
||||||
// Array classes have null protection domain.
|
// Array classes have null protection domain.
|
||||||
// --> see ArrayKlass::complete_create_array_klass()
|
// --> 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.
|
// Initialize current biased locking state.
|
||||||
|
@ -3714,9 +3714,6 @@ void InstanceKlass::verify_on(outputStream* st) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify other fields
|
// Verify other fields
|
||||||
if (array_klasses() != NULL) {
|
|
||||||
guarantee(array_klasses()->is_klass(), "should be klass");
|
|
||||||
}
|
|
||||||
if (constants() != NULL) {
|
if (constants() != NULL) {
|
||||||
guarantee(constants()->is_constantPool(), "should be constant pool");
|
guarantee(constants()->is_constantPool(), "should be constant pool");
|
||||||
}
|
}
|
||||||
|
|
|
@ -170,7 +170,7 @@ class InstanceKlass: public Klass {
|
||||||
// Package this class is defined in
|
// Package this class is defined in
|
||||||
PackageEntry* _package_entry;
|
PackageEntry* _package_entry;
|
||||||
// Array classes holding elements of this class.
|
// Array classes holding elements of this class.
|
||||||
Klass* volatile _array_klasses;
|
ObjArrayKlass* volatile _array_klasses;
|
||||||
// Constant pool for this class.
|
// Constant pool for this class.
|
||||||
ConstantPool* _constants;
|
ConstantPool* _constants;
|
||||||
// The InnerClasses attribute and EnclosingMethod attribute. The
|
// The InnerClasses attribute and EnclosingMethod attribute. The
|
||||||
|
@ -390,10 +390,10 @@ class InstanceKlass: public Klass {
|
||||||
void set_itable_length(int len) { _itable_len = len; }
|
void set_itable_length(int len) { _itable_len = len; }
|
||||||
|
|
||||||
// array klasses
|
// array klasses
|
||||||
Klass* array_klasses() const { return _array_klasses; }
|
ObjArrayKlass* array_klasses() const { return _array_klasses; }
|
||||||
inline Klass* array_klasses_acquire() const; // load with acquire semantics
|
inline ObjArrayKlass* array_klasses_acquire() const; // load with acquire semantics
|
||||||
void set_array_klasses(Klass* k) { _array_klasses = k; }
|
void set_array_klasses(ObjArrayKlass* k) { _array_klasses = k; }
|
||||||
inline void release_set_array_klasses(Klass* k); // store with release semantics
|
inline void release_set_array_klasses(ObjArrayKlass* k); // store with release semantics
|
||||||
|
|
||||||
// methods
|
// methods
|
||||||
Array<Method*>* methods() const { return _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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -34,11 +34,11 @@
|
||||||
#include "utilities/globalDefinitions.hpp"
|
#include "utilities/globalDefinitions.hpp"
|
||||||
#include "utilities/macros.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);
|
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);
|
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);
|
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) {
|
int n, Klass* element_klass, TRAPS) {
|
||||||
|
|
||||||
// Eagerly allocate the direct array supertype.
|
// Eagerly allocate the direct array supertype.
|
||||||
|
@ -88,7 +88,7 @@ Klass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_data,
|
||||||
// Now retry from the beginning
|
// Now retry from the beginning
|
||||||
ek = element_klass->array_klass(n, CHECK_NULL);
|
ek = element_klass->array_klass(n, CHECK_NULL);
|
||||||
} // re-lock
|
} // re-lock
|
||||||
return ek;
|
return ObjArrayKlass::cast(ek);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// The element type is already Object. Object[] has direct super of Object.
|
// 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.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* 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;
|
int oop_size(oop obj) const;
|
||||||
|
|
||||||
// Allocation
|
// Allocation
|
||||||
static Klass* allocate_objArray_klass(ClassLoaderData* loader_data,
|
static ObjArrayKlass* allocate_objArray_klass(ClassLoaderData* loader_data,
|
||||||
int n, Klass* element_klass, TRAPS);
|
int n, Klass* element_klass, TRAPS);
|
||||||
|
|
||||||
objArrayOop allocate(int length, 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, _reference_map, Array<u2>*) \
|
||||||
nonstatic_field(ConstantPoolCache, _length, int) \
|
nonstatic_field(ConstantPoolCache, _length, int) \
|
||||||
nonstatic_field(ConstantPoolCache, _constant_pool, ConstantPool*) \
|
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, _methods, Array<Method*>*) \
|
||||||
nonstatic_field(InstanceKlass, _default_methods, Array<Method*>*) \
|
nonstatic_field(InstanceKlass, _default_methods, Array<Method*>*) \
|
||||||
nonstatic_field(InstanceKlass, _local_interfaces, Array<InstanceKlass*>*) \
|
nonstatic_field(InstanceKlass, _local_interfaces, Array<InstanceKlass*>*) \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue