hotspot/src/share/vm/classfile/classLoader.cpp
changeset 8076 96d498ec7ae1
parent 7910 135031ddb2bb
child 8327 f5a13a17d5f3
equal deleted inserted replaced
8075:582dd25571b2 8076:96d498ec7ae1
    39 #include "memory/universe.inline.hpp"
    39 #include "memory/universe.inline.hpp"
    40 #include "oops/constantPoolKlass.hpp"
    40 #include "oops/constantPoolKlass.hpp"
    41 #include "oops/instanceKlass.hpp"
    41 #include "oops/instanceKlass.hpp"
    42 #include "oops/instanceRefKlass.hpp"
    42 #include "oops/instanceRefKlass.hpp"
    43 #include "oops/oop.inline.hpp"
    43 #include "oops/oop.inline.hpp"
    44 #include "oops/symbolOop.hpp"
    44 #include "oops/symbol.hpp"
    45 #include "prims/jvm_misc.hpp"
    45 #include "prims/jvm_misc.hpp"
    46 #include "runtime/arguments.hpp"
    46 #include "runtime/arguments.hpp"
    47 #include "runtime/compilationPolicy.hpp"
    47 #include "runtime/compilationPolicy.hpp"
    48 #include "runtime/fprofiler.hpp"
    48 #include "runtime/fprofiler.hpp"
    49 #include "runtime/handles.hpp"
    49 #include "runtime/handles.hpp"
   750                       pp = pp->next()) {
   750                       pp = pp->next()) {
   751       n += (int)(strlen(pp->pkgname()) + 1);
   751       n += (int)(strlen(pp->pkgname()) + 1);
   752     }
   752     }
   753   }
   753   }
   754   if (*top + n + sizeof(intptr_t) >= end) {
   754   if (*top + n + sizeof(intptr_t) >= end) {
   755     warning("\nThe shared miscellaneous data space is not large "
   755     report_out_of_shared_space(SharedMiscData);
   756             "enough to \npreload requested classes.  Use "
       
   757             "-XX:SharedMiscDataSize= to increase \nthe initial "
       
   758             "size of the miscellaneous data space.\n");
       
   759     exit(2);
       
   760   }
   756   }
   761 
   757 
   762   // Copy the table data (the strings) to the shared space.
   758   // Copy the table data (the strings) to the shared space.
   763   n = align_size_up(n, sizeof(HeapWord));
   759   n = align_size_up(n, sizeof(HeapWord));
   764   *(intptr_t*)(*top) = n;
   760   *(intptr_t*)(*top) = n;
   873 
   869 
   874   return result();
   870   return result();
   875 }
   871 }
   876 
   872 
   877 
   873 
   878 instanceKlassHandle ClassLoader::load_classfile(symbolHandle h_name, TRAPS) {
   874 instanceKlassHandle ClassLoader::load_classfile(Symbol* h_name, TRAPS) {
   879   ResourceMark rm(THREAD);
   875   ResourceMark rm(THREAD);
   880   EventMark m("loading class " INTPTR_FORMAT, (address)h_name());
   876   EventMark m("loading class " INTPTR_FORMAT, (address)h_name);
   881   ThreadProfilerMark tpm(ThreadProfilerMark::classLoaderRegion);
   877   ThreadProfilerMark tpm(ThreadProfilerMark::classLoaderRegion);
   882 
   878 
   883   stringStream st;
   879   stringStream st;
   884   // st.print() uses too much stack space while handling a StackOverflowError
   880   // st.print() uses too much stack space while handling a StackOverflowError
   885   // st.print("%s.class", h_name->as_utf8());
   881   // st.print("%s.class", h_name->as_utf8());
   910 
   906 
   911     // class file found, parse it
   907     // class file found, parse it
   912     ClassFileParser parser(stream);
   908     ClassFileParser parser(stream);
   913     Handle class_loader;
   909     Handle class_loader;
   914     Handle protection_domain;
   910     Handle protection_domain;
   915     symbolHandle parsed_name;
   911     TempNewSymbol parsed_name = NULL;
   916     instanceKlassHandle result = parser.parseClassFile(h_name,
   912     instanceKlassHandle result = parser.parseClassFile(h_name,
   917                                                        class_loader,
   913                                                        class_loader,
   918                                                        protection_domain,
   914                                                        protection_domain,
   919                                                        parsed_name,
   915                                                        parsed_name,
   920                                                        false,
   916                                                        false,
  1306     if (strchr(buffer, '.') == NULL) {
  1302     if (strchr(buffer, '.') == NULL) {
  1307       _compile_the_world_counter++;
  1303       _compile_the_world_counter++;
  1308       if (_compile_the_world_counter > CompileTheWorldStopAt) return;
  1304       if (_compile_the_world_counter > CompileTheWorldStopAt) return;
  1309 
  1305 
  1310       // Construct name without extension
  1306       // Construct name without extension
  1311       symbolHandle sym = oopFactory::new_symbol_handle(buffer, CHECK);
  1307       TempNewSymbol sym = SymbolTable::new_symbol(buffer, CHECK);
  1312       // Use loader to load and initialize class
  1308       // Use loader to load and initialize class
  1313       klassOop ik = SystemDictionary::resolve_or_null(sym, loader, Handle(), THREAD);
  1309       klassOop ik = SystemDictionary::resolve_or_null(sym, loader, Handle(), THREAD);
  1314       instanceKlassHandle k (THREAD, ik);
  1310       instanceKlassHandle k (THREAD, ik);
  1315       if (k.not_null() && !HAS_PENDING_EXCEPTION) {
  1311       if (k.not_null() && !HAS_PENDING_EXCEPTION) {
  1316         k->initialize(THREAD);
  1312         k->initialize(THREAD);