< prev index next >

src/hotspot/share/code/nmethod.cpp

Print this page




   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  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 "jvm.h"
  27 #include "code/codeCache.hpp"
  28 #include "code/compiledIC.hpp"

  29 #include "code/dependencies.hpp"
  30 #include "code/nativeInst.hpp"
  31 #include "code/nmethod.hpp"
  32 #include "code/scopeDesc.hpp"
  33 #include "compiler/abstractCompiler.hpp"
  34 #include "compiler/compileBroker.hpp"
  35 #include "compiler/compileLog.hpp"
  36 #include "compiler/compilerDirectives.hpp"
  37 #include "compiler/directivesParser.hpp"
  38 #include "compiler/disassembler.hpp"
  39 #include "gc/shared/gcLocker.hpp"
  40 #include "interpreter/bytecode.hpp"
  41 #include "logging/log.hpp"
  42 #include "logging/logStream.hpp"

  43 #include "memory/resourceArea.hpp"
  44 #include "oops/method.inline.hpp"
  45 #include "oops/methodData.hpp"
  46 #include "oops/oop.inline.hpp"
  47 #include "prims/jvmtiImpl.hpp"
  48 #include "runtime/atomic.hpp"


  49 #include "runtime/jniHandles.inline.hpp"
  50 #include "runtime/orderAccess.inline.hpp"
  51 #include "runtime/os.hpp"
  52 #include "runtime/sharedRuntime.hpp"
  53 #include "runtime/sweeper.hpp"

  54 #include "utilities/align.hpp"
  55 #include "utilities/dtrace.hpp"
  56 #include "utilities/events.hpp"
  57 #include "utilities/resourceHash.hpp"
  58 #include "utilities/xmlstream.hpp"
  59 #if INCLUDE_JVMCI
  60 #include "jvmci/jvmciJavaClasses.hpp"
  61 #endif
  62 
  63 #ifdef DTRACE_ENABLED
  64 
  65 // Only bother with this argument setup if dtrace is available
  66 
  67 #define DTRACE_METHOD_UNLOAD_PROBE(method)                                \
  68   {                                                                       \
  69     Method* m = (method);                                                 \
  70     if (m != NULL) {                                                      \
  71       Symbol* klass_name = m->klass_name();                               \
  72       Symbol* name = m->name();                                           \
  73       Symbol* signature = m->signature();                                 \


 362 // of oopSize, then 2*sizeof(PcDesc) is)
 363 static int adjust_pcs_size(int pcs_size) {
 364   int nsize = align_up(pcs_size,   oopSize);
 365   if ((nsize % sizeof(PcDesc)) != 0) {
 366     nsize = pcs_size + sizeof(PcDesc);
 367   }
 368   assert((nsize % oopSize) == 0, "correct alignment");
 369   return nsize;
 370 }
 371 
 372 
 373 int nmethod::total_size() const {
 374   return
 375     consts_size()        +
 376     insts_size()         +
 377     stub_size()          +
 378     scopes_data_size()   +
 379     scopes_pcs_size()    +
 380     handler_table_size() +
 381     nul_chk_table_size();




 382 }
 383 
 384 const char* nmethod::compile_kind() const {
 385   if (is_osr_method())     return "osr";
 386   if (method() != NULL && is_native_method())  return "c2n";
 387   return NULL;
 388 }
 389 
 390 // Fill in default values for various flag fields
 391 void nmethod::init_defaults() {
 392   _state                      = not_installed;
 393   _has_flushed_dependencies   = 0;
 394   _lock_count                 = 0;
 395   _stack_traversal_mark       = 0;
 396   _unload_reported            = false; // jvmti state
 397   _is_far_code                = false; // nmethods are located in CodeCache
 398 
 399 #ifdef ASSERT
 400   _oops_are_stale             = false;
 401 #endif




   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  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 "jvm.h"
  27 #include "code/codeCache.hpp"
  28 #include "code/compiledIC.hpp"
  29 #include "code/compiledMethod.inline.hpp"
  30 #include "code/dependencies.hpp"
  31 #include "code/nativeInst.hpp"
  32 #include "code/nmethod.hpp"
  33 #include "code/scopeDesc.hpp"
  34 #include "compiler/abstractCompiler.hpp"
  35 #include "compiler/compileBroker.hpp"
  36 #include "compiler/compileLog.hpp"
  37 #include "compiler/compilerDirectives.hpp"
  38 #include "compiler/directivesParser.hpp"
  39 #include "compiler/disassembler.hpp"
  40 #include "gc/shared/gcLocker.hpp"
  41 #include "interpreter/bytecode.hpp"
  42 #include "logging/log.hpp"
  43 #include "logging/logStream.hpp"
  44 #include "memory/allocation.inline.hpp"
  45 #include "memory/resourceArea.hpp"
  46 #include "oops/method.inline.hpp"
  47 #include "oops/methodData.hpp"
  48 #include "oops/oop.inline.hpp"
  49 #include "prims/jvmtiImpl.hpp"
  50 #include "runtime/atomic.hpp"
  51 #include "runtime/frame.inline.hpp"
  52 #include "runtime/handles.inline.hpp"
  53 #include "runtime/jniHandles.inline.hpp"
  54 #include "runtime/orderAccess.inline.hpp"
  55 #include "runtime/os.hpp"
  56 #include "runtime/sharedRuntime.hpp"
  57 #include "runtime/sweeper.hpp"
  58 #include "runtime/vmThread.hpp"
  59 #include "utilities/align.hpp"
  60 #include "utilities/dtrace.hpp"
  61 #include "utilities/events.hpp"
  62 #include "utilities/resourceHash.hpp"
  63 #include "utilities/xmlstream.hpp"
  64 #if INCLUDE_JVMCI
  65 #include "jvmci/jvmciJavaClasses.hpp"
  66 #endif
  67 
  68 #ifdef DTRACE_ENABLED
  69 
  70 // Only bother with this argument setup if dtrace is available
  71 
  72 #define DTRACE_METHOD_UNLOAD_PROBE(method)                                \
  73   {                                                                       \
  74     Method* m = (method);                                                 \
  75     if (m != NULL) {                                                      \
  76       Symbol* klass_name = m->klass_name();                               \
  77       Symbol* name = m->name();                                           \
  78       Symbol* signature = m->signature();                                 \


 367 // of oopSize, then 2*sizeof(PcDesc) is)
 368 static int adjust_pcs_size(int pcs_size) {
 369   int nsize = align_up(pcs_size,   oopSize);
 370   if ((nsize % sizeof(PcDesc)) != 0) {
 371     nsize = pcs_size + sizeof(PcDesc);
 372   }
 373   assert((nsize % oopSize) == 0, "correct alignment");
 374   return nsize;
 375 }
 376 
 377 
 378 int nmethod::total_size() const {
 379   return
 380     consts_size()        +
 381     insts_size()         +
 382     stub_size()          +
 383     scopes_data_size()   +
 384     scopes_pcs_size()    +
 385     handler_table_size() +
 386     nul_chk_table_size();
 387 }
 388 
 389 address* nmethod::orig_pc_addr(const frame* fr) {
 390   return (address*) ((address)fr->unextended_sp() + _orig_pc_offset);
 391 }
 392 
 393 const char* nmethod::compile_kind() const {
 394   if (is_osr_method())     return "osr";
 395   if (method() != NULL && is_native_method())  return "c2n";
 396   return NULL;
 397 }
 398 
 399 // Fill in default values for various flag fields
 400 void nmethod::init_defaults() {
 401   _state                      = not_installed;
 402   _has_flushed_dependencies   = 0;
 403   _lock_count                 = 0;
 404   _stack_traversal_mark       = 0;
 405   _unload_reported            = false; // jvmti state
 406   _is_far_code                = false; // nmethods are located in CodeCache
 407 
 408 #ifdef ASSERT
 409   _oops_are_stale             = false;
 410 #endif


< prev index next >