Mercurial > hg > truffle
comparison src/share/vm/code/debugInfoRec.cpp @ 6725:da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author | coleenp |
---|---|
date | Sat, 01 Sep 2012 13:25:18 -0400 |
parents | 1d7922586cf6 |
children | e522a00b91aa 9758d9f36299 |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1998, 2012, 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. |
303 | 303 |
304 // serialize sender stream offest | 304 // serialize sender stream offest |
305 stream()->write_int(sender_stream_offset); | 305 stream()->write_int(sender_stream_offset); |
306 | 306 |
307 // serialize scope | 307 // serialize scope |
308 jobject method_enc = (method == NULL)? NULL: method->constant_encoding(); | 308 Metadata* method_enc = (method == NULL)? NULL: method->constant_encoding(); |
309 stream()->write_int(oop_recorder()->find_index(method_enc)); | 309 stream()->write_int(oop_recorder()->find_index(method_enc)); |
310 stream()->write_bci(bci); | 310 stream()->write_bci(bci); |
311 assert(method == NULL || | 311 assert(method == NULL || |
312 (method->is_native() && bci == 0) || | 312 (method->is_native() && bci == 0) || |
313 (!method->is_native() && 0 <= bci && bci < method->code_size()) || | 313 (!method->is_native() && 0 <= bci && bci < method->code_size()) || |
376 if (is_safepoint) { | 376 if (is_safepoint) { |
377 _prev_safepoint_pc = pc_offset; | 377 _prev_safepoint_pc = pc_offset; |
378 } | 378 } |
379 } | 379 } |
380 | 380 |
381 #ifdef ASSERT | |
382 bool DebugInformationRecorder::recorders_frozen() { | |
383 return _oop_recorder->is_complete() || _oop_recorder->is_complete(); | |
384 } | |
385 | |
386 void DebugInformationRecorder::mark_recorders_frozen() { | |
387 _oop_recorder->freeze(); | |
388 } | |
389 #endif // PRODUCT | |
390 | |
381 DebugToken* DebugInformationRecorder::create_scope_values(GrowableArray<ScopeValue*>* values) { | 391 DebugToken* DebugInformationRecorder::create_scope_values(GrowableArray<ScopeValue*>* values) { |
382 assert(!_oop_recorder->is_complete(), "not frozen yet"); | 392 assert(!recorders_frozen(), "not frozen yet"); |
383 return (DebugToken*) (intptr_t) serialize_scope_values(values); | 393 return (DebugToken*) (intptr_t) serialize_scope_values(values); |
384 } | 394 } |
385 | 395 |
386 | 396 |
387 DebugToken* DebugInformationRecorder::create_monitor_values(GrowableArray<MonitorValue*>* monitors) { | 397 DebugToken* DebugInformationRecorder::create_monitor_values(GrowableArray<MonitorValue*>* monitors) { |
388 assert(!_oop_recorder->is_complete(), "not frozen yet"); | 398 assert(!recorders_frozen(), "not frozen yet"); |
389 return (DebugToken*) (intptr_t) serialize_monitor_values(monitors); | 399 return (DebugToken*) (intptr_t) serialize_monitor_values(monitors); |
390 } | 400 } |
391 | 401 |
392 | 402 |
393 int DebugInformationRecorder::data_size() { | 403 int DebugInformationRecorder::data_size() { |
394 debug_only(_oop_recorder->oop_size()); // mark it "frozen" for asserts | 404 debug_only(mark_recorders_frozen()); // mark it "frozen" for asserts |
395 return _stream->position(); | 405 return _stream->position(); |
396 } | 406 } |
397 | 407 |
398 | 408 |
399 int DebugInformationRecorder::pcs_size() { | 409 int DebugInformationRecorder::pcs_size() { |
400 debug_only(_oop_recorder->oop_size()); // mark it "frozen" for asserts | 410 debug_only(mark_recorders_frozen()); // mark it "frozen" for asserts |
401 if (last_pc()->pc_offset() != PcDesc::upper_offset_limit) | 411 if (last_pc()->pc_offset() != PcDesc::upper_offset_limit) |
402 add_new_pc_offset(PcDesc::upper_offset_limit); | 412 add_new_pc_offset(PcDesc::upper_offset_limit); |
403 return _pcs_length * sizeof(PcDesc); | 413 return _pcs_length * sizeof(PcDesc); |
404 } | 414 } |
405 | 415 |