hotspot/src/share/vm/code/nmethod.cpp
changeset 6432 d36e09b60939
parent 6418 6671edbd230e
child 6453 970dc585ab63
equal deleted inserted replaced
6431:d76212f83824 6432:d36e09b60939
    85 static
    85 static
    86 struct nmethod_stats_struct {
    86 struct nmethod_stats_struct {
    87   int nmethod_count;
    87   int nmethod_count;
    88   int total_size;
    88   int total_size;
    89   int relocation_size;
    89   int relocation_size;
       
    90   int consts_size;
    90   int insts_size;
    91   int insts_size;
    91   int stub_size;
    92   int stub_size;
    92   int consts_size;
       
    93   int scopes_data_size;
    93   int scopes_data_size;
    94   int scopes_pcs_size;
    94   int scopes_pcs_size;
    95   int dependencies_size;
    95   int dependencies_size;
    96   int handler_table_size;
    96   int handler_table_size;
    97   int nul_chk_table_size;
    97   int nul_chk_table_size;
    99 
    99 
   100   void note_nmethod(nmethod* nm) {
   100   void note_nmethod(nmethod* nm) {
   101     nmethod_count += 1;
   101     nmethod_count += 1;
   102     total_size          += nm->size();
   102     total_size          += nm->size();
   103     relocation_size     += nm->relocation_size();
   103     relocation_size     += nm->relocation_size();
       
   104     consts_size         += nm->consts_size();
   104     insts_size          += nm->insts_size();
   105     insts_size          += nm->insts_size();
   105     stub_size           += nm->stub_size();
   106     stub_size           += nm->stub_size();
   106     consts_size         += nm->consts_size();
       
   107     oops_size           += nm->oops_size();
   107     oops_size           += nm->oops_size();
   108     scopes_data_size    += nm->scopes_data_size();
   108     scopes_data_size    += nm->scopes_data_size();
   109     scopes_pcs_size     += nm->scopes_pcs_size();
   109     scopes_pcs_size     += nm->scopes_pcs_size();
   110     dependencies_size   += nm->dependencies_size();
   110     dependencies_size   += nm->dependencies_size();
   111     handler_table_size  += nm->handler_table_size();
   111     handler_table_size  += nm->handler_table_size();
   114   void print_nmethod_stats() {
   114   void print_nmethod_stats() {
   115     if (nmethod_count == 0)  return;
   115     if (nmethod_count == 0)  return;
   116     tty->print_cr("Statistics for %d bytecoded nmethods:", nmethod_count);
   116     tty->print_cr("Statistics for %d bytecoded nmethods:", nmethod_count);
   117     if (total_size != 0)          tty->print_cr(" total in heap  = %d", total_size);
   117     if (total_size != 0)          tty->print_cr(" total in heap  = %d", total_size);
   118     if (relocation_size != 0)     tty->print_cr(" relocation     = %d", relocation_size);
   118     if (relocation_size != 0)     tty->print_cr(" relocation     = %d", relocation_size);
       
   119     if (consts_size != 0)         tty->print_cr(" constants      = %d", consts_size);
   119     if (insts_size != 0)          tty->print_cr(" main code      = %d", insts_size);
   120     if (insts_size != 0)          tty->print_cr(" main code      = %d", insts_size);
   120     if (stub_size != 0)           tty->print_cr(" stub code      = %d", stub_size);
   121     if (stub_size != 0)           tty->print_cr(" stub code      = %d", stub_size);
   121     if (consts_size != 0)         tty->print_cr(" constants      = %d", consts_size);
       
   122     if (oops_size != 0)           tty->print_cr(" oops           = %d", oops_size);
   122     if (oops_size != 0)           tty->print_cr(" oops           = %d", oops_size);
   123     if (scopes_data_size != 0)    tty->print_cr(" scopes data    = %d", scopes_data_size);
   123     if (scopes_data_size != 0)    tty->print_cr(" scopes data    = %d", scopes_data_size);
   124     if (scopes_pcs_size != 0)     tty->print_cr(" scopes pcs     = %d", scopes_pcs_size);
   124     if (scopes_pcs_size != 0)     tty->print_cr(" scopes pcs     = %d", scopes_pcs_size);
   125     if (dependencies_size != 0)   tty->print_cr(" dependencies   = %d", dependencies_size);
   125     if (dependencies_size != 0)   tty->print_cr(" dependencies   = %d", dependencies_size);
   126     if (handler_table_size != 0)  tty->print_cr(" handler table  = %d", handler_table_size);
   126     if (handler_table_size != 0)  tty->print_cr(" handler table  = %d", handler_table_size);
   402 //-------------end of code for ExceptionCache--------------
   402 //-------------end of code for ExceptionCache--------------
   403 
   403 
   404 
   404 
   405 int nmethod::total_size() const {
   405 int nmethod::total_size() const {
   406   return
   406   return
       
   407     consts_size()        +
   407     insts_size()         +
   408     insts_size()         +
   408     stub_size()          +
   409     stub_size()          +
   409     consts_size()        +
       
   410     scopes_data_size()   +
   410     scopes_data_size()   +
   411     scopes_pcs_size()    +
   411     scopes_pcs_size()    +
   412     handler_table_size() +
   412     handler_table_size() +
   413     nul_chk_table_size();
   413     nul_chk_table_size();
   414 }
   414 }
   787     _comp_level              = comp_level;
   787     _comp_level              = comp_level;
   788     _compiler                = compiler;
   788     _compiler                = compiler;
   789     _orig_pc_offset          = orig_pc_offset;
   789     _orig_pc_offset          = orig_pc_offset;
   790 
   790 
   791     // Section offsets
   791     // Section offsets
   792     _consts_offset           = content_offset()      + code_buffer->total_offset_of(code_buffer->consts()->start());
   792     _consts_offset           = content_offset()      + code_buffer->total_offset_of(code_buffer->consts());
   793     _stub_offset             = content_offset()      + code_buffer->total_offset_of(code_buffer->stubs()->start());
   793     _stub_offset             = content_offset()      + code_buffer->total_offset_of(code_buffer->stubs());
   794 
   794 
   795     // Exception handler and deopt handler are in the stub section
   795     // Exception handler and deopt handler are in the stub section
   796     _exception_offset        = _stub_offset          + offsets->value(CodeOffsets::Exceptions);
   796     _exception_offset        = _stub_offset          + offsets->value(CodeOffsets::Exceptions);
   797     _deoptimize_offset       = _stub_offset          + offsets->value(CodeOffsets::Deopt);
   797     _deoptimize_offset       = _stub_offset          + offsets->value(CodeOffsets::Deopt);
   798     _deoptimize_mh_offset    = _stub_offset          + offsets->value(CodeOffsets::DeoptMH);
   798     if (has_method_handle_invokes()) {
       
   799       _deoptimize_mh_offset  = _stub_offset          + offsets->value(CodeOffsets::DeoptMH);
       
   800     } else {
       
   801       _deoptimize_mh_offset  = -1;
       
   802     }
   799     if (offsets->value(CodeOffsets::UnwindHandler) != -1) {
   803     if (offsets->value(CodeOffsets::UnwindHandler) != -1) {
   800       _unwind_handler_offset = code_offset()         + offsets->value(CodeOffsets::UnwindHandler);
   804       _unwind_handler_offset = code_offset()         + offsets->value(CodeOffsets::UnwindHandler);
   801     } else {
   805     } else {
   802       _unwind_handler_offset = -1;
   806       _unwind_handler_offset = -1;
   803     }
   807     }
   883     log_identity(xtty);
   887     log_identity(xtty);
   884     xtty->print(" entry='" INTPTR_FORMAT "' size='%d'", code_begin(), size());
   888     xtty->print(" entry='" INTPTR_FORMAT "' size='%d'", code_begin(), size());
   885     xtty->print(" address='" INTPTR_FORMAT "'", (intptr_t) this);
   889     xtty->print(" address='" INTPTR_FORMAT "'", (intptr_t) this);
   886 
   890 
   887     LOG_OFFSET(xtty, relocation);
   891     LOG_OFFSET(xtty, relocation);
       
   892     LOG_OFFSET(xtty, consts);
   888     LOG_OFFSET(xtty, insts);
   893     LOG_OFFSET(xtty, insts);
   889     LOG_OFFSET(xtty, stub);
   894     LOG_OFFSET(xtty, stub);
   890     LOG_OFFSET(xtty, consts);
       
   891     LOG_OFFSET(xtty, scopes_data);
   895     LOG_OFFSET(xtty, scopes_data);
   892     LOG_OFFSET(xtty, scopes_pcs);
   896     LOG_OFFSET(xtty, scopes_pcs);
   893     LOG_OFFSET(xtty, dependencies);
   897     LOG_OFFSET(xtty, dependencies);
   894     LOG_OFFSET(xtty, handler_table);
   898     LOG_OFFSET(xtty, handler_table);
   895     LOG_OFFSET(xtty, nul_chk_table);
   899     LOG_OFFSET(xtty, nul_chk_table);
  2334                                               size());
  2338                                               size());
  2335   if (relocation_size   () > 0) tty->print_cr(" relocation     [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2339   if (relocation_size   () > 0) tty->print_cr(" relocation     [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2336                                               relocation_begin(),
  2340                                               relocation_begin(),
  2337                                               relocation_end(),
  2341                                               relocation_end(),
  2338                                               relocation_size());
  2342                                               relocation_size());
       
  2343   if (consts_size       () > 0) tty->print_cr(" constants      [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
       
  2344                                               consts_begin(),
       
  2345                                               consts_end(),
       
  2346                                               consts_size());
  2339   if (insts_size        () > 0) tty->print_cr(" main code      [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2347   if (insts_size        () > 0) tty->print_cr(" main code      [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2340                                               insts_begin(),
  2348                                               insts_begin(),
  2341                                               insts_end(),
  2349                                               insts_end(),
  2342                                               insts_size());
  2350                                               insts_size());
  2343   if (stub_size         () > 0) tty->print_cr(" stub code      [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2351   if (stub_size         () > 0) tty->print_cr(" stub code      [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2344                                               stub_begin(),
  2352                                               stub_begin(),
  2345                                               stub_end(),
  2353                                               stub_end(),
  2346                                               stub_size());
  2354                                               stub_size());
  2347   if (consts_size       () > 0) tty->print_cr(" constants      [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
       
  2348                                               consts_begin(),
       
  2349                                               consts_end(),
       
  2350                                               consts_size());
       
  2351   if (oops_size         () > 0) tty->print_cr(" oops           [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2355   if (oops_size         () > 0) tty->print_cr(" oops           [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2352                                               oops_begin(),
  2356                                               oops_begin(),
  2353                                               oops_end(),
  2357                                               oops_end(),
  2354                                               oops_size());
  2358                                               oops_size());
  2355   if (scopes_data_size  () > 0) tty->print_cr(" scopes data    [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2359   if (scopes_data_size  () > 0) tty->print_cr(" scopes data    [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2370                                               handler_table_size());
  2374                                               handler_table_size());
  2371   if (nul_chk_table_size() > 0) tty->print_cr(" nul chk table  [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2375   if (nul_chk_table_size() > 0) tty->print_cr(" nul chk table  [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
  2372                                               nul_chk_table_begin(),
  2376                                               nul_chk_table_begin(),
  2373                                               nul_chk_table_end(),
  2377                                               nul_chk_table_end(),
  2374                                               nul_chk_table_size());
  2378                                               nul_chk_table_size());
  2375   if (oops_size         () > 0) tty->print_cr(" oops           [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
       
  2376                                               oops_begin(),
       
  2377                                               oops_end(),
       
  2378                                               oops_size());
       
  2379 }
  2379 }
  2380 
  2380 
  2381 void nmethod::print_code() {
  2381 void nmethod::print_code() {
  2382   HandleMark hm;
  2382   HandleMark hm;
  2383   ResourceMark m;
  2383   ResourceMark m;