1 /* |
1 /* |
2 * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2001, 2014, 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. |
580 VM_GC_HeapInspection inspector(gclog_or_tty, false /* ! full gc */); |
580 VM_GC_HeapInspection inspector(gclog_or_tty, false /* ! full gc */); |
581 inspector.doit(); |
581 inspector.doit(); |
582 } |
582 } |
583 } |
583 } |
584 |
584 |
585 oop CollectedHeap::Class_obj_allocate(KlassHandle klass, int size, KlassHandle real_klass, TRAPS) { |
|
586 debug_only(check_for_valid_allocation_state()); |
|
587 assert(!Universe::heap()->is_gc_active(), "Allocation during gc not allowed"); |
|
588 assert(size >= 0, "int won't convert to size_t"); |
|
589 HeapWord* obj; |
|
590 assert(ScavengeRootsInCode > 0, "must be"); |
|
591 obj = common_mem_allocate_init(real_klass, size, CHECK_NULL); |
|
592 post_allocation_setup_common(klass, obj); |
|
593 assert(Universe::is_bootstrapping() || |
|
594 !((oop)obj)->is_array(), "must not be an array"); |
|
595 NOT_PRODUCT(Universe::heap()->check_for_bad_heap_word_value(obj, size)); |
|
596 oop mirror = (oop)obj; |
|
597 |
|
598 java_lang_Class::set_oop_size(mirror, size); |
|
599 |
|
600 // Setup indirections |
|
601 if (!real_klass.is_null()) { |
|
602 java_lang_Class::set_klass(mirror, real_klass()); |
|
603 real_klass->set_java_mirror(mirror); |
|
604 } |
|
605 |
|
606 InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(mirror->klass()); |
|
607 assert(size == mk->instance_size(real_klass), "should have been set"); |
|
608 |
|
609 // notify jvmti and dtrace |
|
610 post_allocation_notify(klass, (oop)obj); |
|
611 |
|
612 return mirror; |
|
613 } |
|
614 |
|
615 /////////////// Unit tests /////////////// |
585 /////////////// Unit tests /////////////// |
616 |
586 |
617 #ifndef PRODUCT |
587 #ifndef PRODUCT |
618 void CollectedHeap::test_is_in() { |
588 void CollectedHeap::test_is_in() { |
619 CollectedHeap* heap = Universe::heap(); |
589 CollectedHeap* heap = Universe::heap(); |