hotspot/src/share/vm/code/codeBlob.cpp
changeset 5050 47ecd86932ce
parent 1 489c9b5090e2
child 5686 5435e77aa3df
child 5547 f4b087cbb361
equal deleted inserted replaced
5049:cdeb352c6bbe 5050:47ecd86932ce
     1 /*
     1 /*
     2  * Copyright 1998-2007 Sun Microsystems, Inc.  All Rights Reserved.
     2  * Copyright 1998-2010 Sun Microsystems, Inc.  All Rights Reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   247   // align the size to CodeEntryAlignment
   247   // align the size to CodeEntryAlignment
   248   size = align_code_offset(size);
   248   size = align_code_offset(size);
   249   size += round_to(buffer_size, oopSize);
   249   size += round_to(buffer_size, oopSize);
   250   assert(name != NULL, "must provide a name");
   250   assert(name != NULL, "must provide a name");
   251   {
   251   {
   252 
       
   253     MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
   252     MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
   254     blob = new (size) BufferBlob(name, size);
   253     blob = new (size) BufferBlob(name, size);
   255   }
   254   }
   256   // Track memory usage statistic after releasing CodeCache_lock
   255   // Track memory usage statistic after releasing CodeCache_lock
   257   MemoryService::track_code_cache_memory_usage();
   256   MemoryService::track_code_cache_memory_usage();
   269 
   268 
   270   BufferBlob* blob = NULL;
   269   BufferBlob* blob = NULL;
   271   unsigned int size = allocation_size(cb, sizeof(BufferBlob));
   270   unsigned int size = allocation_size(cb, sizeof(BufferBlob));
   272   assert(name != NULL, "must provide a name");
   271   assert(name != NULL, "must provide a name");
   273   {
   272   {
   274 
       
   275     MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
   273     MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
   276     blob = new (size) BufferBlob(name, size, cb);
   274     blob = new (size) BufferBlob(name, size, cb);
   277   }
   275   }
   278   // Track memory usage statistic after releasing CodeCache_lock
   276   // Track memory usage statistic after releasing CodeCache_lock
   279   MemoryService::track_code_cache_memory_usage();
   277   MemoryService::track_code_cache_memory_usage();
   296   }
   294   }
   297   // Track memory usage statistic after releasing CodeCache_lock
   295   // Track memory usage statistic after releasing CodeCache_lock
   298   MemoryService::track_code_cache_memory_usage();
   296   MemoryService::track_code_cache_memory_usage();
   299 }
   297 }
   300 
   298 
   301 bool BufferBlob::is_adapter_blob() const {
   299 
   302   return (strcmp(AdapterHandlerEntry::name, name()) == 0);
   300 //----------------------------------------------------------------------------------------------------
   303 }
   301 // Implementation of AdapterBlob
       
   302 
       
   303 AdapterBlob* AdapterBlob::create(CodeBuffer* cb) {
       
   304   ThreadInVMfromUnknown __tiv;  // get to VM state in case we block on CodeCache_lock
       
   305 
       
   306   AdapterBlob* blob = NULL;
       
   307   unsigned int size = allocation_size(cb, sizeof(AdapterBlob));
       
   308   {
       
   309     MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
       
   310     blob = new (size) AdapterBlob(size, cb);
       
   311   }
       
   312   // Track memory usage statistic after releasing CodeCache_lock
       
   313   MemoryService::track_code_cache_memory_usage();
       
   314 
       
   315   return blob;
       
   316 }
       
   317 
       
   318 
       
   319 //----------------------------------------------------------------------------------------------------
       
   320 // Implementation of MethodHandlesAdapterBlob
       
   321 
       
   322 MethodHandlesAdapterBlob* MethodHandlesAdapterBlob::create(int buffer_size) {
       
   323   ThreadInVMfromUnknown __tiv;  // get to VM state in case we block on CodeCache_lock
       
   324 
       
   325   MethodHandlesAdapterBlob* blob = NULL;
       
   326   unsigned int size = sizeof(MethodHandlesAdapterBlob);
       
   327   // align the size to CodeEntryAlignment
       
   328   size = align_code_offset(size);
       
   329   size += round_to(buffer_size, oopSize);
       
   330   {
       
   331     MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
       
   332     blob = new (size) MethodHandlesAdapterBlob(size);
       
   333   }
       
   334   // Track memory usage statistic after releasing CodeCache_lock
       
   335   MemoryService::track_code_cache_memory_usage();
       
   336 
       
   337   return blob;
       
   338 }
       
   339 
   304 
   340 
   305 //----------------------------------------------------------------------------------------------------
   341 //----------------------------------------------------------------------------------------------------
   306 // Implementation of RuntimeStub
   342 // Implementation of RuntimeStub
   307 
   343 
   308 RuntimeStub::RuntimeStub(
   344 RuntimeStub::RuntimeStub(