Java Performance: In-depth Advice for Tuning and Programming Java 8, 11, and Beyond