comparison src/share/vm/oops/constantPool.cpp @ 20619:b12a2a9b05ca

8056240: Investigate increased GC remark time after class unloading changes in CRM Fuse Reviewed-by: mgerdin, coleenp, bdelsart
author stefank
date Thu, 02 Oct 2014 10:55:36 +0200
parents 78bbf4d43a14
children 7848fc12602b
comparison
equal deleted inserted replaced
20618:7024b693c8f9 20619:b12a2a9b05ca
1815 #undef DBG 1815 #undef DBG
1816 1816
1817 1817
1818 void ConstantPool::set_on_stack(const bool value) { 1818 void ConstantPool::set_on_stack(const bool value) {
1819 if (value) { 1819 if (value) {
1820 _flags |= _on_stack; 1820 int old_flags = *const_cast<volatile int *>(&_flags);
1821 while ((old_flags & _on_stack) == 0) {
1822 int new_flags = old_flags | _on_stack;
1823 int result = Atomic::cmpxchg(new_flags, &_flags, old_flags);
1824
1825 if (result == old_flags) {
1826 // Succeeded.
1827 MetadataOnStackMark::record(this, Thread::current());
1828 return;
1829 }
1830 old_flags = result;
1831 }
1821 } else { 1832 } else {
1833 // Clearing is done single-threadedly.
1822 _flags &= ~_on_stack; 1834 _flags &= ~_on_stack;
1823 } 1835 }
1824 if (value) MetadataOnStackMark::record(this);
1825 } 1836 }
1826 1837
1827 // JSR 292 support for patching constant pool oops after the class is linked and 1838 // JSR 292 support for patching constant pool oops after the class is linked and
1828 // the oop array for resolved references are created. 1839 // the oop array for resolved references are created.
1829 // We can't do this during classfile parsing, which is how the other indexes are 1840 // We can't do this during classfile parsing, which is how the other indexes are