src/share/vm/oops/oop.cpp

Wed, 17 Jul 2013 18:06:29 -0400

author
jiangli
date
Wed, 17 Jul 2013 18:06:29 -0400
changeset 5421
825e6cb66923
parent 4993
746b070f5022
child 6351
f9e35a9dc8c7
permissions
-rw-r--r--

8020309: Eliminate InstanceKlass::_cached_class_file_len.
Summary: Use JvmtiCachedClassFileData.
Reviewed-by: iklam, sspitsyn, dcubed

     1 /*
     2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     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
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  *
    23  */
    25 #include "precompiled.hpp"
    26 #include "classfile/altHashing.hpp"
    27 #include "classfile/javaClasses.hpp"
    28 #include "oops/oop.inline.hpp"
    29 #include "runtime/handles.inline.hpp"
    30 #include "runtime/thread.inline.hpp"
    31 #include "utilities/copy.hpp"
    33 bool always_do_update_barrier = false;
    35 BarrierSet* oopDesc::_bs = NULL;
    37 void oopDesc::print_on(outputStream* st) const {
    38   if (this == NULL) {
    39     st->print_cr("NULL");
    40   } else {
    41     klass()->oop_print_on(oop(this), st);
    42   }
    43 }
    45 void oopDesc::print_address_on(outputStream* st) const {
    46   if (PrintOopAddress) {
    47     st->print("{"INTPTR_FORMAT"}", this);
    48   }
    49 }
    51 void oopDesc::print()         { print_on(tty);         }
    53 void oopDesc::print_address() { print_address_on(tty); }
    55 char* oopDesc::print_string() {
    56   stringStream st;
    57   print_on(&st);
    58   return st.as_string();
    59 }
    61 void oopDesc::print_value() {
    62   print_value_on(tty);
    63 }
    65 char* oopDesc::print_value_string() {
    66   char buf[100];
    67   stringStream st(buf, sizeof(buf));
    68   print_value_on(&st);
    69   return st.as_string();
    70 }
    72 void oopDesc::print_value_on(outputStream* st) const {
    73   oop obj = oop(this);
    74   if (this == NULL) {
    75     st->print("NULL");
    76   } else if (java_lang_String::is_instance(obj)) {
    77     java_lang_String::print(obj, st);
    78     if (PrintOopAddress) print_address_on(st);
    79   } else {
    80     klass()->oop_print_value_on(obj, st);
    81   }
    82 }
    85 void oopDesc::verify_on(outputStream* st) {
    86   if (this != NULL) {
    87     klass()->oop_verify_on(this, st);
    88   }
    89 }
    92 void oopDesc::verify() {
    93   verify_on(tty);
    94 }
    96 intptr_t oopDesc::slow_identity_hash() {
    97   // slow case; we have to acquire the micro lock in order to locate the header
    98   ResetNoHandleMark rnm; // Might be called from LEAF/QUICK ENTRY
    99   HandleMark hm;
   100   Handle object(this);
   101   return ObjectSynchronizer::identity_hash_value_for(object);
   102 }
   104 // When String table needs to rehash
   105 unsigned int oopDesc::new_hash(jint seed) {
   106   EXCEPTION_MARK;
   107   ResourceMark rm;
   108   int length;
   109   jchar* chars = java_lang_String::as_unicode_string(this, length, THREAD);
   110   if (chars != NULL) {
   111     // Use alternate hashing algorithm on the string
   112     return AltHashing::murmur3_32(seed, chars, length);
   113   } else {
   114     vm_exit_out_of_memory(length, OOM_MALLOC_ERROR, "unable to create Unicode strings for String table rehash");
   115     return 0;
   116   }
   117 }
   119 VerifyOopClosure VerifyOopClosure::verify_oop;
   121 void VerifyOopClosure::do_oop(oop* p)       { VerifyOopClosure::do_oop_work(p); }
   122 void VerifyOopClosure::do_oop(narrowOop* p) { VerifyOopClosure::do_oop_work(p); }

mercurial