< prev index next >

src/cpu/x86/vm/c1_MacroAssembler_x86.cpp

Print this page

        

@@ -21,10 +21,11 @@
  * questions.
  *
  */
 
 #include "precompiled.hpp"
+#include "assembler_x86.hpp"
 #include "c1/c1_MacroAssembler.hpp"
 #include "c1/c1_Runtime1.hpp"
 #include "classfile/systemDictionary.hpp"
 #include "gc/shared/collectedHeap.hpp"
 #include "interpreter/interpreter.hpp"

@@ -199,10 +200,14 @@
   assert(header_size >= 0 && object_size >= header_size, "illegal sizes");
 
   try_allocate(obj, noreg, object_size * BytesPerWord, t1, t2, slow_case);
 
   initialize_object(obj, klass, noreg, object_size * HeapWordSize, t1, t2, UseTLAB);
+
+  HEAP_MONITORING(this, noreg, noreg, object_size * HeapWordSize, obj,
+                  t1, t2, call(RuntimeAddress(Runtime1::entry_for(
+                      Runtime1::heap_object_sample_id))););
 }
 
 void C1_MacroAssembler::initialize_object(Register obj, Register klass, Register var_size_in_bytes, int con_size_in_bytes, Register t1, Register t2, bool is_tlab_allocated) {
   assert((con_size_in_bytes & MinObjAlignmentInBytesMask) == 0,
          "con_size_in_bytes is not multiple of alignment");

@@ -275,17 +280,23 @@
 
   initialize_header(obj, klass, len, t1, t2);
 
   // clear rest of allocated space
   const Register len_zero = len;
+  // Initialize body destroys arr_size so remember it.
+  push(arr_size);
   initialize_body(obj, arr_size, header_size * BytesPerWord, len_zero);
+  pop(arr_size);
 
   if (CURRENT_ENV->dtrace_alloc_probes()) {
     assert(obj == rax, "must be");
     call(RuntimeAddress(Runtime1::entry_for(Runtime1::dtrace_object_alloc_id)));
   }
 
+  HEAP_MONITORING(this, noreg, arr_size, 0, obj, t1, noreg,
+                  call(RuntimeAddress(Runtime1::entry_for(
+                      Runtime1::heap_object_sample_id))););
   verify_oop(obj);
 }
 
 
 
< prev index next >