Request for review: 7046490 - Preallocated OOME objects should obey Throwable stack trace protocol

Paul Hohensee paul.hohensee at oracle.com
Tue Jul 19 05:33:06 PDT 2011


Ok.

Paul

On 7/19/11 12:02 AM, David Holmes wrote:
> Paul Hohensee said the following on 07/19/11 13:32:
>> Looks good, except, could you use obj_field() in 
>> unassigned_stacktrace() instead of checking UseCompressedOops there?
>
> Thanks Paul.
>
> I don't think I can use obj_field() as it is for accessing instances 
> and this is a static field. I copied the code for reading the static 
> field from the java.lang.ref functions:
>
> 2286 // Support for java_lang_ref_Reference
> 2287 oop java_lang_ref_Reference::pending_list_lock() {
> 2288   instanceKlass* ik = 
> instanceKlass::cast(SystemDictionary::Reference_klass());
> 2289   address addr = ik->static_field_addr(static_lock_offset);
> 2290   if (UseCompressedOops) {
> 2291     return oopDesc::load_decode_heap_oop((narrowOop *)addr);
> 2292   } else {
> 2293     return oopDesc::load_decode_heap_oop((oop*)addr);
> 2294   }
> 2295 }
> 2296
> 2297 HeapWord *java_lang_ref_Reference::pending_list_addr() {
> 2298   instanceKlass* ik = 
> instanceKlass::cast(SystemDictionary::Reference_klass());
> 2299   address addr = ik->static_field_addr(static_pending_offset);
> 2300   // XXX This might not be HeapWord aligned, almost rather be 
> char *.
> 2301   return (HeapWord*)addr;
> 2302 }
> 2303
> 2304 oop java_lang_ref_Reference::pending_list() {
> 2305   char *addr = (char *)pending_list_addr();
> 2306   if (UseCompressedOops) {
> 2307     return oopDesc::load_decode_heap_oop((narrowOop *)addr);
> 2308   } else {
> 2309     return oopDesc::load_decode_heap_oop((oop*)addr);
> 2310   }
> 2311 }
>
> David
> -----
>
>>
>> Paul
>>
>> On 7/7/11 1:25 AM, David Holmes wrote:
>>> http://cr.openjdk.java.net/~dholmes/7046490/webrev/
>>>
>>> This is a simple fix in the VM to honour the Throwable immutability 
>>> protocol that was defined for Java 7. Pre-allocated Throwable 
>>> instances are normally immutable, but that is not the case for a 
>>> group of pre-allocated OutOfMemoryError instances. To conform to the 
>>> protocol, when we set the backtrace (VM representation of the 
>>> stackTrace) we have to set the stackTrace field to the sentinel 
>>> value stored in the static Throwable.UNASSIGNED_STACK field.
>>>
>>> With this fix in place the workaround in Throwable.java, under 
>>> 7045138, can be backed out.
>>>
>>> Thanks,
>>> David
>>>
>>>
>>>


More information about the hotspot-runtime-dev mailing list