src/hotspot/share/memory/metaspaceShared.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File open Sdiff src/hotspot/share/memory

src/hotspot/share/memory/metaspaceShared.cpp

Print this page




 397 // CDS code for dumping shared archive.
 398 
 399 // Global object for holding classes that have been loaded.  Since this
 400 // is run at a safepoint just before exit, this is the entire set of classes.
 401 static GrowableArray<Klass*>* _global_klass_objects;
 402 
 403 static void collect_array_classes(Klass* k) {
 404   _global_klass_objects->append_if_missing(k);
 405   if (k->is_array_klass()) {
 406     // Add in the array classes too
 407     ArrayKlass* ak = ArrayKlass::cast(k);
 408     Klass* h = ak->higher_dimension();
 409     if (h != NULL) {
 410       h->array_klasses_do(collect_array_classes);
 411     }
 412   }
 413 }
 414 
 415 class CollectClassesClosure : public KlassClosure {
 416   void do_klass(Klass* k) {





 417     if (!(k->is_instance_klass() && InstanceKlass::cast(k)->is_in_error_state())) {
 418       _global_klass_objects->append_if_missing(k);
 419     }
 420     if (k->is_array_klass()) {
 421       // Add in the array classes too
 422       ArrayKlass* ak = ArrayKlass::cast(k);
 423       Klass* h = ak->higher_dimension();
 424       if (h != NULL) {
 425         h->array_klasses_do(collect_array_classes);
 426       }
 427     }
 428   }
 429 };
 430 
 431 static void remove_unshareable_in_classes() {
 432   for (int i = 0; i < _global_klass_objects->length(); i++) {
 433     Klass* k = _global_klass_objects->at(i);
 434     if (!k->is_objArray_klass()) {
 435       // InstanceKlass and TypeArrayKlass will in turn call remove_unshareable_info
 436       // on their array classes.




 397 // CDS code for dumping shared archive.
 398 
 399 // Global object for holding classes that have been loaded.  Since this
 400 // is run at a safepoint just before exit, this is the entire set of classes.
 401 static GrowableArray<Klass*>* _global_klass_objects;
 402 
 403 static void collect_array_classes(Klass* k) {
 404   _global_klass_objects->append_if_missing(k);
 405   if (k->is_array_klass()) {
 406     // Add in the array classes too
 407     ArrayKlass* ak = ArrayKlass::cast(k);
 408     Klass* h = ak->higher_dimension();
 409     if (h != NULL) {
 410       h->array_klasses_do(collect_array_classes);
 411     }
 412   }
 413 }
 414 
 415 class CollectClassesClosure : public KlassClosure {
 416   void do_klass(Klass* k) {
 417     if (!UseAppCDS && !k->class_loader_data()->is_the_null_class_loader_data()) {
 418       // AppCDS is not enabled. Let's omit non-boot classes.
 419       return;
 420     }
 421 
 422     if (!(k->is_instance_klass() && InstanceKlass::cast(k)->is_in_error_state())) {
 423       _global_klass_objects->append_if_missing(k);
 424     }
 425     if (k->is_array_klass()) {
 426       // Add in the array classes too
 427       ArrayKlass* ak = ArrayKlass::cast(k);
 428       Klass* h = ak->higher_dimension();
 429       if (h != NULL) {
 430         h->array_klasses_do(collect_array_classes);
 431       }
 432     }
 433   }
 434 };
 435 
 436 static void remove_unshareable_in_classes() {
 437   for (int i = 0; i < _global_klass_objects->length(); i++) {
 438     Klass* k = _global_klass_objects->at(i);
 439     if (!k->is_objArray_klass()) {
 440       // InstanceKlass and TypeArrayKlass will in turn call remove_unshareable_info
 441       // on their array classes.


src/hotspot/share/memory/metaspaceShared.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File