mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
Merge
This commit is contained in:
commit
f3576a18a9
17 changed files with 102 additions and 136 deletions
|
@ -2503,27 +2503,39 @@ Array<Method*>* ClassFileParser::parse_methods(ClassLoaderData* loader_data,
|
||||||
*has_default_methods = true;
|
*has_default_methods = true;
|
||||||
}
|
}
|
||||||
methods->at_put(index, method());
|
methods->at_put(index, method());
|
||||||
|
|
||||||
|
if (method_annotations != NULL) {
|
||||||
if (*methods_annotations == NULL) {
|
if (*methods_annotations == NULL) {
|
||||||
*methods_annotations =
|
*methods_annotations =
|
||||||
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
||||||
}
|
}
|
||||||
(*methods_annotations)->at_put(index, method_annotations);
|
(*methods_annotations)->at_put(index, method_annotations);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method_parameter_annotations != NULL) {
|
||||||
if (*methods_parameter_annotations == NULL) {
|
if (*methods_parameter_annotations == NULL) {
|
||||||
*methods_parameter_annotations =
|
*methods_parameter_annotations =
|
||||||
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
||||||
}
|
}
|
||||||
(*methods_parameter_annotations)->at_put(index, method_parameter_annotations);
|
(*methods_parameter_annotations)->at_put(index, method_parameter_annotations);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method_default_annotations != NULL) {
|
||||||
if (*methods_default_annotations == NULL) {
|
if (*methods_default_annotations == NULL) {
|
||||||
*methods_default_annotations =
|
*methods_default_annotations =
|
||||||
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
||||||
}
|
}
|
||||||
(*methods_default_annotations)->at_put(index, method_default_annotations);
|
(*methods_default_annotations)->at_put(index, method_default_annotations);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method_type_annotations != NULL) {
|
||||||
if (*methods_type_annotations == NULL) {
|
if (*methods_type_annotations == NULL) {
|
||||||
*methods_type_annotations =
|
*methods_type_annotations =
|
||||||
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
||||||
}
|
}
|
||||||
(*methods_type_annotations)->at_put(index, method_type_annotations);
|
(*methods_type_annotations)->at_put(index, method_type_annotations);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (_need_verify && length > 1) {
|
if (_need_verify && length > 1) {
|
||||||
// Check duplicated methods
|
// Check duplicated methods
|
||||||
|
@ -3338,8 +3350,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name,
|
||||||
bool has_final_method = false;
|
bool has_final_method = false;
|
||||||
AccessFlags promoted_flags;
|
AccessFlags promoted_flags;
|
||||||
promoted_flags.set_flags(0);
|
promoted_flags.set_flags(0);
|
||||||
// These need to be oop pointers because they are allocated lazily
|
|
||||||
// inside parse_methods inside a nested HandleMark
|
|
||||||
Array<AnnotationArray*>* methods_annotations = NULL;
|
Array<AnnotationArray*>* methods_annotations = NULL;
|
||||||
Array<AnnotationArray*>* methods_parameter_annotations = NULL;
|
Array<AnnotationArray*>* methods_parameter_annotations = NULL;
|
||||||
Array<AnnotationArray*>* methods_default_annotations = NULL;
|
Array<AnnotationArray*>* methods_default_annotations = NULL;
|
||||||
|
|
|
@ -318,6 +318,7 @@ ClassLoaderData::~ClassLoaderData() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Metaspace* ClassLoaderData::metaspace_non_null() {
|
Metaspace* ClassLoaderData::metaspace_non_null() {
|
||||||
|
assert(!DumpSharedSpaces, "wrong metaspace!");
|
||||||
// If the metaspace has not been allocated, create a new one. Might want
|
// If the metaspace has not been allocated, create a new one. Might want
|
||||||
// to create smaller arena for Reflection class loaders also.
|
// to create smaller arena for Reflection class loaders also.
|
||||||
// The reason for the delayed allocation is because some class loaders are
|
// The reason for the delayed allocation is because some class loaders are
|
||||||
|
|
|
@ -1285,13 +1285,15 @@ static void merge_in_new_methods(InstanceKlass* klass,
|
||||||
|
|
||||||
enum { ANNOTATIONS, PARAMETERS, DEFAULTS, NUM_ARRAYS };
|
enum { ANNOTATIONS, PARAMETERS, DEFAULTS, NUM_ARRAYS };
|
||||||
|
|
||||||
Array<AnnotationArray*>* original_annots[NUM_ARRAYS];
|
Array<AnnotationArray*>* original_annots[NUM_ARRAYS] = { NULL };
|
||||||
|
|
||||||
Array<Method*>* original_methods = klass->methods();
|
Array<Method*>* original_methods = klass->methods();
|
||||||
Annotations* annots = klass->annotations();
|
Annotations* annots = klass->annotations();
|
||||||
|
if (annots != NULL) {
|
||||||
original_annots[ANNOTATIONS] = annots->methods_annotations();
|
original_annots[ANNOTATIONS] = annots->methods_annotations();
|
||||||
original_annots[PARAMETERS] = annots->methods_parameter_annotations();
|
original_annots[PARAMETERS] = annots->methods_parameter_annotations();
|
||||||
original_annots[DEFAULTS] = annots->methods_default_annotations();
|
original_annots[DEFAULTS] = annots->methods_default_annotations();
|
||||||
|
}
|
||||||
|
|
||||||
Array<int>* original_ordering = klass->method_ordering();
|
Array<int>* original_ordering = klass->method_ordering();
|
||||||
Array<int>* merged_ordering = Universe::the_empty_int_array();
|
Array<int>* merged_ordering = Universe::the_empty_int_array();
|
||||||
|
@ -1370,9 +1372,15 @@ static void merge_in_new_methods(InstanceKlass* klass,
|
||||||
|
|
||||||
// Replace klass methods with new merged lists
|
// Replace klass methods with new merged lists
|
||||||
klass->set_methods(merged_methods);
|
klass->set_methods(merged_methods);
|
||||||
|
if (annots != NULL) {
|
||||||
annots->set_methods_annotations(merged_annots[ANNOTATIONS]);
|
annots->set_methods_annotations(merged_annots[ANNOTATIONS]);
|
||||||
annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]);
|
annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]);
|
||||||
annots->set_methods_default_annotations(merged_annots[DEFAULTS]);
|
annots->set_methods_default_annotations(merged_annots[DEFAULTS]);
|
||||||
|
} else {
|
||||||
|
assert(merged_annots[ANNOTATIONS] == NULL, "Must be");
|
||||||
|
assert(merged_annots[PARAMETERS] == NULL, "Must be");
|
||||||
|
assert(merged_annots[DEFAULTS] == NULL, "Must be");
|
||||||
|
}
|
||||||
|
|
||||||
ClassLoaderData* cld = klass->class_loader_data();
|
ClassLoaderData* cld = klass->class_loader_data();
|
||||||
MetadataFactory::free_array(cld, original_methods);
|
MetadataFactory::free_array(cld, original_methods);
|
||||||
|
|
|
@ -687,19 +687,6 @@ void java_lang_Class::set_array_klass(oop java_class, Klass* klass) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Method* java_lang_Class::resolved_constructor(oop java_class) {
|
|
||||||
Metadata* constructor = java_class->metadata_field(_resolved_constructor_offset);
|
|
||||||
assert(constructor == NULL || constructor->is_method(), "should be method");
|
|
||||||
return ((Method*)constructor);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void java_lang_Class::set_resolved_constructor(oop java_class, Method* constructor) {
|
|
||||||
assert(constructor->is_method(), "should be method");
|
|
||||||
java_class->metadata_field_put(_resolved_constructor_offset, constructor);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool java_lang_Class::is_primitive(oop java_class) {
|
bool java_lang_Class::is_primitive(oop java_class) {
|
||||||
// should assert:
|
// should assert:
|
||||||
//assert(java_lang_Class::is_instance(java_class), "must be a Class object");
|
//assert(java_lang_Class::is_instance(java_class), "must be a Class object");
|
||||||
|
@ -2949,7 +2936,6 @@ int java_lang_System::err_offset_in_bytes() {
|
||||||
|
|
||||||
int java_lang_Class::_klass_offset;
|
int java_lang_Class::_klass_offset;
|
||||||
int java_lang_Class::_array_klass_offset;
|
int java_lang_Class::_array_klass_offset;
|
||||||
int java_lang_Class::_resolved_constructor_offset;
|
|
||||||
int java_lang_Class::_oop_size_offset;
|
int java_lang_Class::_oop_size_offset;
|
||||||
int java_lang_Class::_static_oop_field_count_offset;
|
int java_lang_Class::_static_oop_field_count_offset;
|
||||||
GrowableArray<Klass*>* java_lang_Class::_fixup_mirror_list = NULL;
|
GrowableArray<Klass*>* java_lang_Class::_fixup_mirror_list = NULL;
|
||||||
|
@ -3303,7 +3289,6 @@ void JavaClasses::check_offsets() {
|
||||||
// Fake fields
|
// Fake fields
|
||||||
// CHECK_OFFSET("java/lang/Class", java_lang_Class, klass); // %%% this needs to be checked
|
// CHECK_OFFSET("java/lang/Class", java_lang_Class, klass); // %%% this needs to be checked
|
||||||
// CHECK_OFFSET("java/lang/Class", java_lang_Class, array_klass); // %%% this needs to be checked
|
// CHECK_OFFSET("java/lang/Class", java_lang_Class, array_klass); // %%% this needs to be checked
|
||||||
// CHECK_OFFSET("java/lang/Class", java_lang_Class, resolved_constructor); // %%% this needs to be checked
|
|
||||||
|
|
||||||
// java.lang.Throwable
|
// java.lang.Throwable
|
||||||
|
|
||||||
|
|
|
@ -206,7 +206,6 @@ class java_lang_String : AllStatic {
|
||||||
|
|
||||||
#define CLASS_INJECTED_FIELDS(macro) \
|
#define CLASS_INJECTED_FIELDS(macro) \
|
||||||
macro(java_lang_Class, klass, intptr_signature, false) \
|
macro(java_lang_Class, klass, intptr_signature, false) \
|
||||||
macro(java_lang_Class, resolved_constructor, intptr_signature, false) \
|
|
||||||
macro(java_lang_Class, array_klass, intptr_signature, false) \
|
macro(java_lang_Class, array_klass, intptr_signature, false) \
|
||||||
macro(java_lang_Class, oop_size, int_signature, false) \
|
macro(java_lang_Class, oop_size, int_signature, false) \
|
||||||
macro(java_lang_Class, static_oop_field_count, int_signature, false)
|
macro(java_lang_Class, static_oop_field_count, int_signature, false)
|
||||||
|
@ -218,7 +217,6 @@ class java_lang_Class : AllStatic {
|
||||||
// The fake offsets are added by the class loader when java.lang.Class is loaded
|
// The fake offsets are added by the class loader when java.lang.Class is loaded
|
||||||
|
|
||||||
static int _klass_offset;
|
static int _klass_offset;
|
||||||
static int _resolved_constructor_offset;
|
|
||||||
static int _array_klass_offset;
|
static int _array_klass_offset;
|
||||||
|
|
||||||
static int _oop_size_offset;
|
static int _oop_size_offset;
|
||||||
|
@ -254,15 +252,11 @@ class java_lang_Class : AllStatic {
|
||||||
static bool is_primitive(oop java_class);
|
static bool is_primitive(oop java_class);
|
||||||
static BasicType primitive_type(oop java_class);
|
static BasicType primitive_type(oop java_class);
|
||||||
static oop primitive_mirror(BasicType t);
|
static oop primitive_mirror(BasicType t);
|
||||||
// JVM_NewInstance support
|
|
||||||
static Method* resolved_constructor(oop java_class);
|
|
||||||
static void set_resolved_constructor(oop java_class, Method* constructor);
|
|
||||||
// JVM_NewArray support
|
// JVM_NewArray support
|
||||||
static Klass* array_klass(oop java_class);
|
static Klass* array_klass(oop java_class);
|
||||||
static void set_array_klass(oop java_class, Klass* klass);
|
static void set_array_klass(oop java_class, Klass* klass);
|
||||||
// compiler support for class operations
|
// compiler support for class operations
|
||||||
static int klass_offset_in_bytes() { return _klass_offset; }
|
static int klass_offset_in_bytes() { return _klass_offset; }
|
||||||
static int resolved_constructor_offset_in_bytes() { return _resolved_constructor_offset; }
|
|
||||||
static int array_klass_offset_in_bytes() { return _array_klass_offset; }
|
static int array_klass_offset_in_bytes() { return _array_klass_offset; }
|
||||||
// Support for classRedefinedCount field
|
// Support for classRedefinedCount field
|
||||||
static int classRedefinedCount(oop the_class_mirror);
|
static int classRedefinedCount(oop the_class_mirror);
|
||||||
|
|
|
@ -386,7 +386,6 @@
|
||||||
template(basicType_name, "basicType") \
|
template(basicType_name, "basicType") \
|
||||||
template(append_name, "append") \
|
template(append_name, "append") \
|
||||||
template(klass_name, "klass") \
|
template(klass_name, "klass") \
|
||||||
template(resolved_constructor_name, "resolved_constructor") \
|
|
||||||
template(array_klass_name, "array_klass") \
|
template(array_klass_name, "array_klass") \
|
||||||
template(oop_size_name, "oop_size") \
|
template(oop_size_name, "oop_size") \
|
||||||
template(static_oop_field_count_name, "static_oop_field_count") \
|
template(static_oop_field_count_name, "static_oop_field_count") \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2013, 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
|
||||||
|
@ -287,24 +287,24 @@
|
||||||
"The number of times we'll force an overflow during " \
|
"The number of times we'll force an overflow during " \
|
||||||
"concurrent marking") \
|
"concurrent marking") \
|
||||||
\
|
\
|
||||||
experimental(uintx, G1NewSizePercent, 20, \
|
experimental(uintx, G1NewSizePercent, 5, \
|
||||||
"Percentage (0-100) of the heap size to use as default " \
|
"Percentage (0-100) of the heap size to use as default " \
|
||||||
"minimum young gen size.") \
|
"minimum young gen size.") \
|
||||||
\
|
\
|
||||||
experimental(uintx, G1MaxNewSizePercent, 80, \
|
experimental(uintx, G1MaxNewSizePercent, 60, \
|
||||||
"Percentage (0-100) of the heap size to use as default " \
|
"Percentage (0-100) of the heap size to use as default " \
|
||||||
" maximum young gen size.") \
|
" maximum young gen size.") \
|
||||||
\
|
\
|
||||||
experimental(uintx, G1MixedGCLiveThresholdPercent, 90, \
|
experimental(uintx, G1MixedGCLiveThresholdPercent, 65, \
|
||||||
"Threshold for regions to be considered for inclusion in the " \
|
"Threshold for regions to be considered for inclusion in the " \
|
||||||
"collection set of mixed GCs. " \
|
"collection set of mixed GCs. " \
|
||||||
"Regions with live bytes exceeding this will not be collected.") \
|
"Regions with live bytes exceeding this will not be collected.") \
|
||||||
\
|
\
|
||||||
product(uintx, G1HeapWastePercent, 5, \
|
product(uintx, G1HeapWastePercent, 10, \
|
||||||
"Amount of space, expressed as a percentage of the heap size, " \
|
"Amount of space, expressed as a percentage of the heap size, " \
|
||||||
"that G1 is willing not to collect to avoid expensive GCs.") \
|
"that G1 is willing not to collect to avoid expensive GCs.") \
|
||||||
\
|
\
|
||||||
product(uintx, G1MixedGCCountTarget, 4, \
|
product(uintx, G1MixedGCCountTarget, 8, \
|
||||||
"The target number of mixed GCs after a marking cycle.") \
|
"The target number of mixed GCs after a marking cycle.") \
|
||||||
\
|
\
|
||||||
experimental(uintx, G1OldCSetRegionThresholdPercent, 10, \
|
experimental(uintx, G1OldCSetRegionThresholdPercent, 10, \
|
||||||
|
|
|
@ -878,12 +878,6 @@ void EvacuateFollowersClosureGeneral::do_void() {
|
||||||
|
|
||||||
bool ParNewGeneration::_avoid_promotion_undo = false;
|
bool ParNewGeneration::_avoid_promotion_undo = false;
|
||||||
|
|
||||||
void ParNewGeneration::adjust_desired_tenuring_threshold() {
|
|
||||||
// Set the desired survivor size to half the real survivor space
|
|
||||||
_tenuring_threshold =
|
|
||||||
age_table()->compute_tenuring_threshold(to()->capacity()/HeapWordSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
// A Generation that does parallel young-gen collection.
|
// A Generation that does parallel young-gen collection.
|
||||||
|
|
||||||
void ParNewGeneration::collect(bool full,
|
void ParNewGeneration::collect(bool full,
|
||||||
|
@ -1013,6 +1007,8 @@ void ParNewGeneration::collect(bool full,
|
||||||
size_policy->reset_gc_overhead_limit_count();
|
size_policy->reset_gc_overhead_limit_count();
|
||||||
|
|
||||||
assert(to()->is_empty(), "to space should be empty now");
|
assert(to()->is_empty(), "to space should be empty now");
|
||||||
|
|
||||||
|
adjust_desired_tenuring_threshold();
|
||||||
} else {
|
} else {
|
||||||
assert(_promo_failure_scan_stack.is_empty(), "post condition");
|
assert(_promo_failure_scan_stack.is_empty(), "post condition");
|
||||||
_promo_failure_scan_stack.clear(true); // Clear cached segments.
|
_promo_failure_scan_stack.clear(true); // Clear cached segments.
|
||||||
|
@ -1035,7 +1031,6 @@ void ParNewGeneration::collect(bool full,
|
||||||
from()->set_concurrent_iteration_safe_limit(from()->top());
|
from()->set_concurrent_iteration_safe_limit(from()->top());
|
||||||
to()->set_concurrent_iteration_safe_limit(to()->top());
|
to()->set_concurrent_iteration_safe_limit(to()->top());
|
||||||
|
|
||||||
adjust_desired_tenuring_threshold();
|
|
||||||
if (ResizePLAB) {
|
if (ResizePLAB) {
|
||||||
plab_stats()->adjust_desired_plab_sz(n_workers);
|
plab_stats()->adjust_desired_plab_sz(n_workers);
|
||||||
}
|
}
|
||||||
|
|
|
@ -347,10 +347,6 @@ class ParNewGeneration: public DefNewGeneration {
|
||||||
bool survivor_overflow() { return _survivor_overflow; }
|
bool survivor_overflow() { return _survivor_overflow; }
|
||||||
void set_survivor_overflow(bool v) { _survivor_overflow = v; }
|
void set_survivor_overflow(bool v) { _survivor_overflow = v; }
|
||||||
|
|
||||||
// Adjust the tenuring threshold. See the implementation for
|
|
||||||
// the details of the policy.
|
|
||||||
virtual void adjust_desired_tenuring_threshold();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level);
|
ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level);
|
||||||
|
|
||||||
|
|
|
@ -550,6 +550,11 @@ HeapWord* DefNewGeneration::expand_and_allocate(size_t size,
|
||||||
return allocate(size, is_tlab);
|
return allocate(size, is_tlab);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DefNewGeneration::adjust_desired_tenuring_threshold() {
|
||||||
|
// Set the desired survivor size to half the real survivor space
|
||||||
|
_tenuring_threshold =
|
||||||
|
age_table()->compute_tenuring_threshold(to()->capacity()/HeapWordSize);
|
||||||
|
}
|
||||||
|
|
||||||
void DefNewGeneration::collect(bool full,
|
void DefNewGeneration::collect(bool full,
|
||||||
bool clear_all_soft_refs,
|
bool clear_all_soft_refs,
|
||||||
|
@ -649,9 +654,7 @@ void DefNewGeneration::collect(bool full,
|
||||||
|
|
||||||
assert(to()->is_empty(), "to space should be empty now");
|
assert(to()->is_empty(), "to space should be empty now");
|
||||||
|
|
||||||
// Set the desired survivor size to half the real survivor space
|
adjust_desired_tenuring_threshold();
|
||||||
_tenuring_threshold =
|
|
||||||
age_table()->compute_tenuring_threshold(to()->capacity()/HeapWordSize);
|
|
||||||
|
|
||||||
// A successful scavenge should restart the GC time limit count which is
|
// A successful scavenge should restart the GC time limit count which is
|
||||||
// for full GC's.
|
// for full GC's.
|
||||||
|
|
|
@ -124,7 +124,9 @@ protected:
|
||||||
_should_allocate_from_space = true;
|
_should_allocate_from_space = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
// Tenuring
|
||||||
|
void adjust_desired_tenuring_threshold();
|
||||||
|
|
||||||
// Spaces
|
// Spaces
|
||||||
EdenSpace* _eden_space;
|
EdenSpace* _eden_space;
|
||||||
ContiguousSpace* _from_space;
|
ContiguousSpace* _from_space;
|
||||||
|
|
|
@ -66,9 +66,13 @@ class MetadataFactory : AllStatic {
|
||||||
if (data != NULL) {
|
if (data != NULL) {
|
||||||
assert(loader_data != NULL, "shouldn't pass null");
|
assert(loader_data != NULL, "shouldn't pass null");
|
||||||
int size = data->size();
|
int size = data->size();
|
||||||
|
if (DumpSharedSpaces) {
|
||||||
|
loader_data->ro_metaspace()->deallocate((MetaWord*)data, size, false);
|
||||||
|
} else {
|
||||||
loader_data->metaspace_non_null()->deallocate((MetaWord*)data, size, false);
|
loader_data->metaspace_non_null()->deallocate((MetaWord*)data, size, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Deallocation method for metadata
|
// Deallocation method for metadata
|
||||||
template <class T>
|
template <class T>
|
||||||
|
@ -77,6 +81,7 @@ class MetadataFactory : AllStatic {
|
||||||
assert(loader_data != NULL, "shouldn't pass null");
|
assert(loader_data != NULL, "shouldn't pass null");
|
||||||
int size = md->size();
|
int size = md->size();
|
||||||
// Call metadata's deallocate function which will call deallocate fields
|
// Call metadata's deallocate function which will call deallocate fields
|
||||||
|
assert(!DumpSharedSpaces, "cannot deallocate metadata when dumping CDS archive");
|
||||||
assert(!md->on_stack(), "can't deallocate things on stack");
|
assert(!md->on_stack(), "can't deallocate things on stack");
|
||||||
md->deallocate_contents(loader_data);
|
md->deallocate_contents(loader_data);
|
||||||
loader_data->metaspace_non_null()->deallocate((MetaWord*)md, size, md->is_klass());
|
loader_data->metaspace_non_null()->deallocate((MetaWord*)md, size, md->is_klass());
|
||||||
|
|
|
@ -2890,11 +2890,7 @@ void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
|
||||||
st->print(BULLET"fake entry for mirror: ");
|
st->print(BULLET"fake entry for mirror: ");
|
||||||
mirrored_klass->print_value_on_maybe_null(st);
|
mirrored_klass->print_value_on_maybe_null(st);
|
||||||
st->cr();
|
st->cr();
|
||||||
st->print(BULLET"fake entry resolved_constructor: ");
|
|
||||||
Method* ctor = java_lang_Class::resolved_constructor(obj);
|
|
||||||
ctor->print_value_on_maybe_null(st);
|
|
||||||
Klass* array_klass = java_lang_Class::array_klass(obj);
|
Klass* array_klass = java_lang_Class::array_klass(obj);
|
||||||
st->cr();
|
|
||||||
st->print(BULLET"fake entry for array: ");
|
st->print(BULLET"fake entry for array: ");
|
||||||
array_klass->print_value_on_maybe_null(st);
|
array_klass->print_value_on_maybe_null(st);
|
||||||
st->cr();
|
st->cr();
|
||||||
|
|
|
@ -1582,10 +1582,13 @@ JVM_ENTRY(jbyteArray, JVM_GetClassTypeAnnotations(JNIEnv *env, jclass cls))
|
||||||
if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
|
if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
|
||||||
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
|
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
|
||||||
if (k->oop_is_instance()) {
|
if (k->oop_is_instance()) {
|
||||||
typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->type_annotations()->class_annotations(), CHECK_NULL);
|
Annotations* type_annotations = InstanceKlass::cast(k)->type_annotations();
|
||||||
|
if (type_annotations != NULL) {
|
||||||
|
typeArrayOop a = Annotations::make_java_array(type_annotations->class_annotations(), CHECK_NULL);
|
||||||
return (jbyteArray) JNIHandles::make_local(env, a);
|
return (jbyteArray) JNIHandles::make_local(env, a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
|
@ -972,18 +972,6 @@ class CommandLineFlags {
|
||||||
notproduct(uintx, WarnOnStalledSpinLock, 0, \
|
notproduct(uintx, WarnOnStalledSpinLock, 0, \
|
||||||
"Prints warnings for stalled SpinLocks") \
|
"Prints warnings for stalled SpinLocks") \
|
||||||
\
|
\
|
||||||
develop(bool, InitializeJavaLangSystem, true, \
|
|
||||||
"Initialize java.lang.System - turn off for individual " \
|
|
||||||
"method debugging") \
|
|
||||||
\
|
|
||||||
develop(bool, InitializeJavaLangString, true, \
|
|
||||||
"Initialize java.lang.String - turn off for individual " \
|
|
||||||
"method debugging") \
|
|
||||||
\
|
|
||||||
develop(bool, InitializeJavaLangExceptionsErrors, true, \
|
|
||||||
"Initialize various error and exception classes - turn off for " \
|
|
||||||
"individual method debugging") \
|
|
||||||
\
|
|
||||||
product(bool, RegisterFinalizersAtInit, true, \
|
product(bool, RegisterFinalizersAtInit, true, \
|
||||||
"Register finalizable objects at end of Object.<init> or " \
|
"Register finalizable objects at end of Object.<init> or " \
|
||||||
"after allocation") \
|
"after allocation") \
|
||||||
|
|
|
@ -1716,7 +1716,6 @@ static void ensure_join(JavaThread* thread) {
|
||||||
// cleanup_failed_attach_current_thread as well.
|
// cleanup_failed_attach_current_thread as well.
|
||||||
void JavaThread::exit(bool destroy_vm, ExitType exit_type) {
|
void JavaThread::exit(bool destroy_vm, ExitType exit_type) {
|
||||||
assert(this == JavaThread::current(), "thread consistency check");
|
assert(this == JavaThread::current(), "thread consistency check");
|
||||||
if (!InitializeJavaLangSystem) return;
|
|
||||||
|
|
||||||
HandleMark hm(this);
|
HandleMark hm(this);
|
||||||
Handle uncaught_exception(this, this->pending_exception());
|
Handle uncaught_exception(this, this->pending_exception());
|
||||||
|
@ -3469,11 +3468,7 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
|
||||||
create_vm_init_libraries();
|
create_vm_init_libraries();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (InitializeJavaLangString) {
|
|
||||||
initialize_class(vmSymbols::java_lang_String(), CHECK_0);
|
initialize_class(vmSymbols::java_lang_String(), CHECK_0);
|
||||||
} else {
|
|
||||||
warning("java.lang.String not initialized");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AggressiveOpts) {
|
if (AggressiveOpts) {
|
||||||
{
|
{
|
||||||
|
@ -3514,7 +3509,6 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize java_lang.System (needed before creating the thread)
|
// Initialize java_lang.System (needed before creating the thread)
|
||||||
if (InitializeJavaLangSystem) {
|
|
||||||
initialize_class(vmSymbols::java_lang_System(), CHECK_0);
|
initialize_class(vmSymbols::java_lang_System(), CHECK_0);
|
||||||
initialize_class(vmSymbols::java_lang_ThreadGroup(), CHECK_0);
|
initialize_class(vmSymbols::java_lang_ThreadGroup(), CHECK_0);
|
||||||
Handle thread_group = create_initial_thread_group(CHECK_0);
|
Handle thread_group = create_initial_thread_group(CHECK_0);
|
||||||
|
@ -3538,12 +3532,8 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
|
||||||
// get the Java runtime name after java.lang.System is initialized
|
// get the Java runtime name after java.lang.System is initialized
|
||||||
JDK_Version::set_runtime_name(get_java_runtime_name(THREAD));
|
JDK_Version::set_runtime_name(get_java_runtime_name(THREAD));
|
||||||
JDK_Version::set_runtime_version(get_java_runtime_version(THREAD));
|
JDK_Version::set_runtime_version(get_java_runtime_version(THREAD));
|
||||||
} else {
|
|
||||||
warning("java.lang.System not initialized");
|
|
||||||
}
|
|
||||||
|
|
||||||
// an instance of OutOfMemory exception has been allocated earlier
|
// an instance of OutOfMemory exception has been allocated earlier
|
||||||
if (InitializeJavaLangExceptionsErrors) {
|
|
||||||
initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK_0);
|
initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK_0);
|
||||||
initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK_0);
|
initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK_0);
|
||||||
initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK_0);
|
initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK_0);
|
||||||
|
@ -3552,15 +3542,6 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
|
||||||
initialize_class(vmSymbols::java_lang_StackOverflowError(), CHECK_0);
|
initialize_class(vmSymbols::java_lang_StackOverflowError(), CHECK_0);
|
||||||
initialize_class(vmSymbols::java_lang_IllegalMonitorStateException(), CHECK_0);
|
initialize_class(vmSymbols::java_lang_IllegalMonitorStateException(), CHECK_0);
|
||||||
initialize_class(vmSymbols::java_lang_IllegalArgumentException(), CHECK_0);
|
initialize_class(vmSymbols::java_lang_IllegalArgumentException(), CHECK_0);
|
||||||
} else {
|
|
||||||
warning("java.lang.OutOfMemoryError has not been initialized");
|
|
||||||
warning("java.lang.NullPointerException has not been initialized");
|
|
||||||
warning("java.lang.ClassCastException has not been initialized");
|
|
||||||
warning("java.lang.ArrayStoreException has not been initialized");
|
|
||||||
warning("java.lang.ArithmeticException has not been initialized");
|
|
||||||
warning("java.lang.StackOverflowError has not been initialized");
|
|
||||||
warning("java.lang.IllegalArgumentException has not been initialized");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// See : bugid 4211085.
|
// See : bugid 4211085.
|
||||||
|
|
|
@ -1198,7 +1198,6 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
/*********************************/ \
|
/*********************************/ \
|
||||||
\
|
\
|
||||||
static_field(java_lang_Class, _klass_offset, int) \
|
static_field(java_lang_Class, _klass_offset, int) \
|
||||||
static_field(java_lang_Class, _resolved_constructor_offset, int) \
|
|
||||||
static_field(java_lang_Class, _array_klass_offset, int) \
|
static_field(java_lang_Class, _array_klass_offset, int) \
|
||||||
static_field(java_lang_Class, _oop_size_offset, int) \
|
static_field(java_lang_Class, _oop_size_offset, int) \
|
||||||
static_field(java_lang_Class, _static_oop_field_count_offset, int) \
|
static_field(java_lang_Class, _static_oop_field_count_offset, int) \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue