src/share/vm/runtime/handles.inline.hpp

Print this page


   1 /*
   2  * Copyright (c) 1998, 2003, 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  */
  24 














  25 // these inline functions are in a separate file to break an include cycle
  26 // between Thread and Handle
  27 
  28 inline Handle::Handle(oop obj) {
  29   if (obj == NULL) {
  30     _handle = NULL;
  31   } else {
  32     _handle = Thread::current()->handle_area()->allocate_handle(obj);
  33   }
  34 }
  35 
  36 
  37 #ifndef ASSERT
  38 inline Handle::Handle(Thread* thread, oop obj) {
  39   assert(thread == Thread::current(), "sanity check");
  40   if (obj == NULL) {
  41     _handle = NULL;
  42   } else {
  43     _handle = thread->handle_area()->allocate_handle(obj);
  44   }


  54 inline void HandleMark::push() {
  55   // This is intentionally a NOP. pop_and_restore will reset
  56   // values to the HandleMark further down the stack, typically
  57   // in JavaCalls::call_helper.
  58   debug_only(_area->_handle_mark_nesting++);
  59 }
  60 
  61 inline void HandleMark::pop_and_restore() {
  62   HandleArea* area = _area;   // help compilers with poor alias analysis
  63   // Delete later chunks
  64   if( _chunk->next() ) {
  65     _chunk->next_chop();
  66   }
  67   // Roll back arena to saved top markers
  68   area->_chunk = _chunk;
  69   area->_hwm = _hwm;
  70   area->_max = _max;
  71   NOT_PRODUCT(area->set_size_in_bytes(_size_in_bytes);)
  72   debug_only(area->_handle_mark_nesting--);
  73 }


   1 /*
   2  * Copyright (c) 1998, 2010, 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  */
  24 
  25 #ifndef SHARE_VM_RUNTIME_HANDLES_INLINE_HPP
  26 #define SHARE_VM_RUNTIME_HANDLES_INLINE_HPP
  27 
  28 #include "runtime/handles.hpp"
  29 #ifdef TARGET_OS_FAMILY_linux
  30 # include "thread_linux.inline.hpp"
  31 #endif
  32 #ifdef TARGET_OS_FAMILY_solaris
  33 # include "thread_solaris.inline.hpp"
  34 #endif
  35 #ifdef TARGET_OS_FAMILY_windows
  36 # include "thread_windows.inline.hpp"
  37 #endif
  38 
  39 // these inline functions are in a separate file to break an include cycle
  40 // between Thread and Handle
  41 
  42 inline Handle::Handle(oop obj) {
  43   if (obj == NULL) {
  44     _handle = NULL;
  45   } else {
  46     _handle = Thread::current()->handle_area()->allocate_handle(obj);
  47   }
  48 }
  49 
  50 
  51 #ifndef ASSERT
  52 inline Handle::Handle(Thread* thread, oop obj) {
  53   assert(thread == Thread::current(), "sanity check");
  54   if (obj == NULL) {
  55     _handle = NULL;
  56   } else {
  57     _handle = thread->handle_area()->allocate_handle(obj);
  58   }


  68 inline void HandleMark::push() {
  69   // This is intentionally a NOP. pop_and_restore will reset
  70   // values to the HandleMark further down the stack, typically
  71   // in JavaCalls::call_helper.
  72   debug_only(_area->_handle_mark_nesting++);
  73 }
  74 
  75 inline void HandleMark::pop_and_restore() {
  76   HandleArea* area = _area;   // help compilers with poor alias analysis
  77   // Delete later chunks
  78   if( _chunk->next() ) {
  79     _chunk->next_chop();
  80   }
  81   // Roll back arena to saved top markers
  82   area->_chunk = _chunk;
  83   area->_hwm = _hwm;
  84   area->_max = _max;
  85   NOT_PRODUCT(area->set_size_in_bytes(_size_in_bytes);)
  86   debug_only(area->_handle_mark_nesting--);
  87 }
  88 
  89 #endif // SHARE_VM_RUNTIME_HANDLES_INLINE_HPP