src/share/vm/prims/methodHandles.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/prims/methodHandles.cpp

src/share/vm/prims/methodHandles.cpp

Print this page

        

*** 34,43 **** --- 34,44 ---- #include "runtime/compilationPolicy.hpp" #include "runtime/javaCalls.hpp" #include "runtime/reflection.hpp" #include "runtime/signature.hpp" #include "runtime/stubRoutines.hpp" + #include "utilities/exceptions.hpp" /* * JSR 292 reference implementation: method handles * The JDK 7 reference implementation represented method handle
*** 53,82 **** */ bool MethodHandles::_enabled = false; // set true after successful native linkage MethodHandlesAdapterBlob* MethodHandles::_adapter_code = NULL; ! //------------------------------------------------------------------------------ ! // MethodHandles::generate_adapters ! // ! void MethodHandles::generate_adapters() { ! if (SystemDictionary::MethodHandle_klass() == NULL) return; assert(_adapter_code == NULL, "generate only once"); ResourceMark rm; TraceTime timer("MethodHandles adapters generation", TraceStartupTime); _adapter_code = MethodHandlesAdapterBlob::create(adapter_code_size); ! if (_adapter_code == NULL) ! vm_exit_out_of_memory(adapter_code_size, OOM_MALLOC_ERROR, ! "CodeCache: no room for MethodHandles adapters"); ! { CodeBuffer code(_adapter_code); MethodHandlesAdapterGenerator g(&code); g.generate(); code.log_section_sizes("MethodHandlesAdapterBlob"); ! } } //------------------------------------------------------------------------------ // MethodHandlesAdapterGenerator::generate // --- 54,87 ---- */ bool MethodHandles::_enabled = false; // set true after successful native linkage MethodHandlesAdapterBlob* MethodHandles::_adapter_code = NULL; ! ! /** ! * Generates method handle adapters. Returns 'false' if memory allocation ! * failed and true otherwise. ! */ ! bool MethodHandles::generate_adapters() { ! if (SystemDictionary::MethodHandle_klass() == NULL) { ! return true; ! } assert(_adapter_code == NULL, "generate only once"); ResourceMark rm; TraceTime timer("MethodHandles adapters generation", TraceStartupTime); _adapter_code = MethodHandlesAdapterBlob::create(adapter_code_size); ! if (_adapter_code == NULL) { ! return false; ! } ! CodeBuffer code(_adapter_code); MethodHandlesAdapterGenerator g(&code); g.generate(); code.log_section_sizes("MethodHandlesAdapterBlob"); ! return true; } //------------------------------------------------------------------------------ // MethodHandlesAdapterGenerator::generate //
*** 1399,1408 **** if (TraceInvokeDynamic) { tty->print_cr("MethodHandle support loaded (using LambdaForms)"); } if (enable_MH) { ! MethodHandles::generate_adapters(); MethodHandles::set_enabled(true); } } JVM_END --- 1404,1415 ---- if (TraceInvokeDynamic) { tty->print_cr("MethodHandle support loaded (using LambdaForms)"); } if (enable_MH) { ! if (MethodHandles::generate_adapters() == false) { ! THROW_MSG(vmSymbols::java_lang_VirtualMachineError(), "Out of space in CodeCache for method handle adapters"); ! } MethodHandles::set_enabled(true); } } JVM_END
src/share/vm/prims/methodHandles.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File