Throwable types handled specially in the VM?
David.Holmes at oracle.com
Mon Aug 23 02:48:19 PDT 2010
Joe Darcy said the following on 08/21/10 07:01:
> From the name "allocate_permanent_instance," I assume that these
> exception objects are saved and reused for the lifetime of the JVM,
> correct? For better or worse, Throwable and its subclasses are mutable;
> the suppressed warning information is a new possible mutation, setting
> the stack trace is an existing mutability avenue.
> If so, as Remi has recently pointed out, perhaps these fields should be
> cleared when the exceptions are resued?
As I have outlined in detail in the thread "Updated ARM Spec" the
pre-allocated instances that can be thrown more than once do not have
any mutable state (prior to suppressed exceptions) and so there is
nothing to clear.
I just realized however that clearing the suppressed-exception state is
simply not an option as the same exception instance could be thrown
concurrently in multiple threads. In short these shared immutable
exception instances must remain immutable if they are to be shared.
> From an API perspective, perhaps the suppression feature should be
> modified so that self-suppression is interpreted as not allowing a
> particular exception instance to record addition suppressed exceptions...
If you are suggesting this as a way of making the suppression state
immutable, then I'd suggest that it might be preferable to model this
the same way that stacktraces are handled - they only need to be
optionally present. The same thing could be said for suppressed-exceptions.
More information about the hotspot-dev