< prev index next >

src/hotspot/share/oops/klass.cpp

Print this page




  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/dictionary.hpp"
  27 #include "classfile/javaClasses.hpp"
  28 #include "classfile/systemDictionary.hpp"
  29 #include "classfile/vmSymbols.hpp"
  30 #include "gc/shared/collectedHeap.inline.hpp"
  31 #include "logging/log.hpp"
  32 #include "memory/heapInspection.hpp"
  33 #include "memory/metadataFactory.hpp"
  34 #include "memory/metaspaceClosure.hpp"
  35 #include "memory/metaspaceShared.hpp"
  36 #include "memory/oopFactory.hpp"
  37 #include "memory/resourceArea.hpp"

  38 #include "oops/instanceKlass.hpp"
  39 #include "oops/klass.inline.hpp"
  40 #include "oops/oop.inline.hpp"
  41 #include "runtime/atomic.hpp"
  42 #include "runtime/handles.inline.hpp"
  43 #include "runtime/orderAccess.inline.hpp"
  44 #include "trace/traceMacros.hpp"
  45 #include "utilities/macros.hpp"
  46 #include "utilities/stack.inline.hpp"
  47 
  48 void Klass::set_java_mirror(Handle m) {
  49   assert(!m.is_null(), "New mirror should never be null.");
  50   assert(_java_mirror.resolve() == NULL, "should only be used to initialize mirror");
  51   _java_mirror = class_loader_data()->add_handle(m);
  52 }
  53 
  54 oop Klass::java_mirror() const {
  55   return _java_mirror.resolve();
  56 }
  57 


 552     }
 553 
 554     // No archived mirror data
 555     _java_mirror = NULL;
 556     this->clear_has_raw_archived_mirror();
 557   }
 558 
 559   // Only recreate it if not present.  A previous attempt to restore may have
 560   // gotten an OOM later but keep the mirror if it was created.
 561   if (java_mirror() == NULL) {
 562     log_trace(cds, mirror)("Recreate mirror for %s", external_name());
 563     java_lang_Class::create_mirror(this, loader, module_handle, protection_domain, CHECK);
 564   }
 565 }
 566 
 567 #if INCLUDE_CDS_JAVA_HEAP
 568 // Used at CDS dump time to access the archived mirror. No GC barrier.
 569 oop Klass::archived_java_mirror_raw() {
 570   assert(DumpSharedSpaces, "called only during runtime");
 571   assert(has_raw_archived_mirror(), "must have raw archived mirror");
 572   return oopDesc::decode_heap_oop(_archived_mirror);
 573 }
 574 
 575 // Used at CDS runtime to get the archived mirror from shared class. Uses GC barrier.
 576 oop Klass::archived_java_mirror() {
 577   assert(UseSharedSpaces, "UseSharedSpaces expected.");
 578   assert(has_raw_archived_mirror(), "must have raw archived mirror");
 579   return RootAccess<IN_ARCHIVE_ROOT>::oop_load(&_archived_mirror);
 580 }
 581 
 582 // No GC barrier
 583 void Klass::set_archived_java_mirror_raw(oop m) {
 584   assert(DumpSharedSpaces, "called only during runtime");
 585   _archived_mirror = oopDesc::encode_heap_oop(m);
 586 }
 587 #endif // INCLUDE_CDS_JAVA_HEAP
 588 
 589 Klass* Klass::array_klass_or_null(int rank) {
 590   EXCEPTION_MARK;
 591   // No exception can be thrown by array_klass_impl when called with or_null == true.
 592   // (In anycase, the execption mark will fail if it do so)
 593   return array_klass_impl(true, rank, THREAD);
 594 }
 595 
 596 
 597 Klass* Klass::array_klass_or_null() {
 598   EXCEPTION_MARK;
 599   // No exception can be thrown by array_klass_impl when called with or_null == true.
 600   // (In anycase, the execption mark will fail if it do so)
 601   return array_klass_impl(true, THREAD);
 602 }
 603 
 604 
 605 Klass* Klass::array_klass_impl(bool or_null, int rank, TRAPS) {




  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/dictionary.hpp"
  27 #include "classfile/javaClasses.hpp"
  28 #include "classfile/systemDictionary.hpp"
  29 #include "classfile/vmSymbols.hpp"
  30 #include "gc/shared/collectedHeap.inline.hpp"
  31 #include "logging/log.hpp"
  32 #include "memory/heapInspection.hpp"
  33 #include "memory/metadataFactory.hpp"
  34 #include "memory/metaspaceClosure.hpp"
  35 #include "memory/metaspaceShared.hpp"
  36 #include "memory/oopFactory.hpp"
  37 #include "memory/resourceArea.hpp"
  38 #include "oops/compressedOops.inline.hpp"
  39 #include "oops/instanceKlass.hpp"
  40 #include "oops/klass.inline.hpp"
  41 #include "oops/oop.inline.hpp"
  42 #include "runtime/atomic.hpp"
  43 #include "runtime/handles.inline.hpp"
  44 #include "runtime/orderAccess.inline.hpp"
  45 #include "trace/traceMacros.hpp"
  46 #include "utilities/macros.hpp"
  47 #include "utilities/stack.inline.hpp"
  48 
  49 void Klass::set_java_mirror(Handle m) {
  50   assert(!m.is_null(), "New mirror should never be null.");
  51   assert(_java_mirror.resolve() == NULL, "should only be used to initialize mirror");
  52   _java_mirror = class_loader_data()->add_handle(m);
  53 }
  54 
  55 oop Klass::java_mirror() const {
  56   return _java_mirror.resolve();
  57 }
  58 


 553     }
 554 
 555     // No archived mirror data
 556     _java_mirror = NULL;
 557     this->clear_has_raw_archived_mirror();
 558   }
 559 
 560   // Only recreate it if not present.  A previous attempt to restore may have
 561   // gotten an OOM later but keep the mirror if it was created.
 562   if (java_mirror() == NULL) {
 563     log_trace(cds, mirror)("Recreate mirror for %s", external_name());
 564     java_lang_Class::create_mirror(this, loader, module_handle, protection_domain, CHECK);
 565   }
 566 }
 567 
 568 #if INCLUDE_CDS_JAVA_HEAP
 569 // Used at CDS dump time to access the archived mirror. No GC barrier.
 570 oop Klass::archived_java_mirror_raw() {
 571   assert(DumpSharedSpaces, "called only during runtime");
 572   assert(has_raw_archived_mirror(), "must have raw archived mirror");
 573   return CompressedOops::decode(_archived_mirror);
 574 }
 575 
 576 // Used at CDS runtime to get the archived mirror from shared class. Uses GC barrier.
 577 oop Klass::archived_java_mirror() {
 578   assert(UseSharedSpaces, "UseSharedSpaces expected.");
 579   assert(has_raw_archived_mirror(), "must have raw archived mirror");
 580   return RootAccess<IN_ARCHIVE_ROOT>::oop_load(&_archived_mirror);
 581 }
 582 
 583 // No GC barrier
 584 void Klass::set_archived_java_mirror_raw(oop m) {
 585   assert(DumpSharedSpaces, "called only during runtime");
 586   _archived_mirror = CompressedOops::encode(m);
 587 }
 588 #endif // INCLUDE_CDS_JAVA_HEAP
 589 
 590 Klass* Klass::array_klass_or_null(int rank) {
 591   EXCEPTION_MARK;
 592   // No exception can be thrown by array_klass_impl when called with or_null == true.
 593   // (In anycase, the execption mark will fail if it do so)
 594   return array_klass_impl(true, rank, THREAD);
 595 }
 596 
 597 
 598 Klass* Klass::array_klass_or_null() {
 599   EXCEPTION_MARK;
 600   // No exception can be thrown by array_klass_impl when called with or_null == true.
 601   // (In anycase, the execption mark will fail if it do so)
 602   return array_klass_impl(true, THREAD);
 603 }
 604 
 605 
 606 Klass* Klass::array_klass_impl(bool or_null, int rank, TRAPS) {


< prev index next >