DateTimeFormatter.format() uses exceptions for flow control

Clément MATHIEU clement at
Sun Oct 9 15:24:25 UTC 2016

Hi ! 

I noticed that DateTimePrintContext.getValue() relies on exceptions to
handle optionality. Using exceptions for flow control seems both
unexpected and very costly, ie. I discovered the issue
when  LocaleDate.format(BASIC_ISO_DATE) showed up as a heavy hitter in
my application. 

Formatting a LocateDate as a "yyyyMMdd" string should take ~0.1μs but
currently takes from ~2.5μs, stack depth = 0, to ~10μs, stack depth =
128 when an optional parser is defined but the optional field is not
supported. This seems unfortunate when exceptions can easily be avoided
by testing if the field is supported before trying to get its value. 


JMH benchmarks:

What do you think ?

Note: Many tests within java.time are currently broken because of
TestNG upgrade, see
Would it help if I spend some time adding the missing L suffixes ?  



More information about the core-libs-dev mailing list