JDK 13 RFR of JDK-8220346: Refactor java.lang.Throwable to use Objects.requireNonNull
Mandy Chung
mandy.chung at oracle.com
Fri Mar 8 20:57:05 UTC 2019
On 3/8/19 12:35 PM, Martin Buchholz wrote:
> On Fri, Mar 8, 2019 at 3:57 AM Tagir Valeev <amaembo at gmail.com> wrote:
>
>> Hello!
>>
>>> diff -r 274361bd6915 src/java.base/share/classes/java/lang/Throwable.java
>>> --- a/src/java.base/share/classes/java/lang/Throwable.java Thu Mar 07
>>> 10:22:19 2019 +0100
>>> +++ b/src/java.base/share/classes/java/lang/Throwable.java Fri Mar 08
>>> 02:06:42 2019 -0800
>>> @@ -874,8 +874,7 @@
>>> // Validate argument
>>> StackTraceElement[] defensiveCopy = stackTrace.clone();
>>> for (int i = 0; i < defensiveCopy.length; i++) {
>>> - if (defensiveCopy[i] == null)
>>> - throw new NullPointerException("stackTrace[" + i + "]");
>>> + Objects.requireNonNull(defensiveCopy[i], "stackTrace[" + i
>>> + "]");
>>
>> Won't it produce unnecessary garbage due to string concatenation on
>> the common case when all frames are non-null?
>>
>
> I share Tagir's doubts. I avoid this construction in performance sensitive
> code.
I see Tagir's comment after I replied. I share Tagir's concern as well
and the exception message would be constructed unconditionally with
this change. java.base is compiled with -XDstringConcat=inline due to
bootstrapping and so the supplier does not help here.
Mandy
More information about the core-libs-dev
mailing list