comparison src/cpu/x86/vm/c1_MacroAssembler_x86.cpp @ 2100:b1a2afa37ec4

7003271: Hotspot should track cumulative Java heap bytes allocated on a per-thread basis Summary: Track allocated bytes in Thread's, update on TLAB retirement and direct allocation in Eden and tenured, add JNI methods for ThreadMXBean. Reviewed-by: coleenp, kvn, dholmes, ysr
author phh
date Fri, 07 Jan 2011 10:42:32 -0500
parents ac637b7220d1
children 8b0236cbed14 069ab3f976d3
comparison
equal deleted inserted replaced
2097:039eb4201e06 2100:b1a2afa37ec4
1 /* 1 /*
2 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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.
139 void C1_MacroAssembler::try_allocate(Register obj, Register var_size_in_bytes, int con_size_in_bytes, Register t1, Register t2, Label& slow_case) { 139 void C1_MacroAssembler::try_allocate(Register obj, Register var_size_in_bytes, int con_size_in_bytes, Register t1, Register t2, Label& slow_case) {
140 if (UseTLAB) { 140 if (UseTLAB) {
141 tlab_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, t2, slow_case); 141 tlab_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, t2, slow_case);
142 } else { 142 } else {
143 eden_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, slow_case); 143 eden_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, slow_case);
144 incr_allocated_bytes(noreg, var_size_in_bytes, con_size_in_bytes, t1);
144 } 145 }
145 } 146 }
146 147
147 148
148 void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register len, Register t1, Register t2) { 149 void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register len, Register t1, Register t2) {
232 } 233 }
233 234
234 235
235 void C1_MacroAssembler::allocate_object(Register obj, Register t1, Register t2, int header_size, int object_size, Register klass, Label& slow_case) { 236 void C1_MacroAssembler::allocate_object(Register obj, Register t1, Register t2, int header_size, int object_size, Register klass, Label& slow_case) {
236 assert(obj == rax, "obj must be in rax, for cmpxchg"); 237 assert(obj == rax, "obj must be in rax, for cmpxchg");
237 assert(obj != t1 && obj != t2 && t1 != t2, "registers must be different"); // XXX really? 238 assert_different_registers(obj, t1, t2); // XXX really?
238 assert(header_size >= 0 && object_size >= header_size, "illegal sizes"); 239 assert(header_size >= 0 && object_size >= header_size, "illegal sizes");
239 240
240 try_allocate(obj, noreg, object_size * BytesPerWord, t1, t2, slow_case); 241 try_allocate(obj, noreg, object_size * BytesPerWord, t1, t2, slow_case);
241 242
242 initialize_object(obj, klass, noreg, object_size * HeapWordSize, t1, t2); 243 initialize_object(obj, klass, noreg, object_size * HeapWordSize, t1, t2);