rlmw
Performance Testing Spring Boot with Gatling
How to solve blocking and locking performance problems with profiling
How to solve CPU time problems with continuous profiling and Flame Graphs
Aleksey Shipilëv on JDK Updates
Can Instanceof Make Unmodifiable Collections in Java Faster?
Understanding Production: What can you measure?
Solving JVM Performance Problems with Profilers: Wallclock vs. CPU Time Edition
Application Profiling vs. System Profiling
Always-on production Flame Graphs with thread grouping for Java
Top 3 Java Performance Improvements we're looking forward to
Threadsafe Offheap Buffers
Efficient open source event counters from the Agrona library
Unit testing lambda expressions and streams
First Class Functions in Java 8
Java Debuggers and Timeouts
A modern testing and behavioural specification framework for Java 8
Too Fast, Too Megamorphic: what influences method call performance in Java?
As to what to do in the meantime - I would suggest that you use either findbugs' immutability detection or Graham Allen's Mutability Detector: https://github.com/MutabilityDetector/MutabilityDetector. Findbugs picks up an @Immutable annotation and checks whether this is the case, whilst Mutability Detector allows you to assert that classes are immutable as part of your unit tests.
I appreciate its not as good as language support, but it is better than relying on an unchecked convention.
If you want to update your tzdata then you should use the tzupdater tool that is shipped with Java. This has been updated to support JSR-310. If you want to perform the updates then this is just a commandline tool and can be integrated into chef/puppet etc. as needed.
There was discussion during the development of JSR-310 about the inclusion of Java library methods to update a running JVM. There are a load of "not obvious to a developer" things that happen if you do this and it was decided the technical complexity and potential confusion outweighed the benefit of implementing it.
Let's address the issues one at a time.
1) What's the point in Local?
The goal is to give people the option to ignore the complexity involved with time zone rules. People are intuitively familiar with what these things mean. If you have a calendar on your wall above your desk: that's a LocalDate. If you have a clock on the wall: that's LocalTime. With respect to how they work in the presence of DST, they will automatically change time. For many use cases LocalDate and LocalTime is entirely suitable and people shouldn't be forced to put up with the unbearable complexity of timezones when they don't need to.
2) Why are they called Local?
As I mentioned above they represent the perspective of a clock on your wall or a calendar on your desk. They are local in this sense. I appreciate that these things might be a bit weird when you first get used to them and there was some discussion about renaming the classes during development. It was concluded that there were no better class names at the time. Furthermore if you looks at ISO 8601 [0] which is the most relevant standard to this API the same concept is also referred to as Local, Jodatime also uses the term Local.
3) Birthdays, Holidays and relative points in time
If you want to handle something like a birthday then there is a "MonthDay" class in JSR-310 which is designed for this exact purpose. It is a composite class of a month and a day and has an API consistent with the other classes in 310. If you want to handle 'relative' points in time then you might want to consider using the Duration or Period classes.
Hope that helps!
Obviously there are some people who use java.util.Date, but it is a real pain in the neck to use and is very commonly complained about.