The Curious Engineer

All blogs / Java / JVM

nipafx

nipafx.dev

A website to sharpen your Java skills - by Nicolai (aka nipafx), a Java enthusiast with a passion for learning and sharing, online and offline.

Java / JVMDev tools / editors / IDEsEngineering blogs

Posts
409 from 27 Jun 2014 to 19 Oct 2026
Posting
weekly (45 in the last year)
Kind
personal blog
Feed
https://nipafx.dev/feed.xml

2026 38

  1. Modern Java - Past | Present | Future
  2. #events
  3. Talks
  4. #java‑next
  5. OpenJDK Bug Fixing, JavaOne, and JDK 28 - Inside Java Newscast #116
  6. #posts
  7. #videos
  8. #community
  9. #java‑28
  10. #openjdk
  11. Java Next
  12. #project‑amber
  13. #project‑babylon
  14. #project‑detroit
  15. #project‑leyden
  16. #project‑loom
  17. #project‑panama
  18. #project‑valhalla
  19. JSON API, Valhalla Progress, LTS ❤️ PQC - Inside Java Newscast #114
  20. #core‑libs
  21. Meta
  22. JDK 27 & Valhalla, Now! - Inside Java Newscast #113
  23. #java‑27
  24. Valhalla, Now!
  25. Avoiding Final Field Mutation
  26. #core‑lang
  27. #java‑26
  28. #libraries
  29. #migration
  30. You Must Avoid Final Field Mutation - Inside Java Newscast #110
  31. #deprecation
  32. Analysing Crashed JVMs - Inside Java Newscast #109
  33. Java 28 - Better Language, Better APIs, Better Runtime
  34. Towards Better Checked Exceptions - Inside Java Newscast #107
  35. Removal of ThreadPoolExecutor.finalize()
  36. LazyConstants in JDK 26 - Inside Java Newscast #106
  37. Carrier Classes; Beyond Records - Inside Java Newscast #105
  38. Java's Plans for 2026 - Inside Java Newscast #104

2025 32

  1. Java's 2025 in Review - Inside Java Newscast #103
  2. #java‑25
  3. All Features in Java 26 - Inside Java Newscast #102
  4. Java 26 Warns of Deep Reflection - Inside Java Newscast #101
  5. Q&A About My Work At Oracle's Java Platform Group
  6. Try the New Valhalla EA Build - Inside Java Newscast #100
  7. Consistent Behavior of new File("")
  8. Three G1 Improvements - Inside Java Newscast #99
  9. #performance
  10. All API Additions From Java 21 to 25
  11. #documentation
  12. #streams
  13. Structured Concurrency in Action
  14. #structured‑concurrency
  15. Upgrading From Java 21 To 25: All You Need To Know
  16. Java Architects Answer Your Questions - Inside Java Newscast #97
  17. HTTP/3 in Java - Inside Java Newscast #96
  18. Java Gets a JSON API - Inside Java Newscast #95
  19. Java 25 is ALSO no LTS Version - Inside Java Newscast #94
  20. Java 25 Encodes PEM - Inside Java Newscast #93
  21. Java 25 Brings 18 JEPs 😱 Inside Java Newscast #92
  22. Structured Concurrency Revamp in Java 25 - Inside Java Newscast #91
  23. JavaOne'25 Highlights - Inside Java Newscast #89
  24. #ai
  25. Maven
  26. New Null Checks in Inner Class Constructors
  27. Scoped Values in Java 24 - Inside Java Newscast #86
  28. #java‑24
  29. JDK 24 Deprecates Remote Debugging with jstat And jhsdb For Removal
  30. Java Language Evolution in 2025 - Inside Java Newscast #84
  31. Java's Plans for 2025 - Inside Java Newscast #83
  32. #project‑lilliput

2024 44

  1. Java 24 Performance Improvements & Deprecations - Inside Java Newscast #82
  2. JDK 24 Prepares Restricted Native Access
  3. Java 24 Language & API Changes - Inside Java Newscast #81
  4. Java 24 Stops Pinning Virtual Threads (Almost) - Inside Java Newscast #80
  5. #virtual‑threads
  6. Release Your (Java) Projects Like OpenJDK With Tip & Tail - Inside Java Newscast #79
  7. Advanced "Java 101"
  8. #java‑basics
  9. #on‑ramp
  10. Big News from Project Valhalla - Inside Java Newscast #77
  11. How to Read a JDK Enhancement Proposal - Inside Java Newscast #74
  12. Integrity by Default - Inside Java Newscast #73
  13. J ms
  14. #reflection
  15. Java and AI - A Structured Analysis
  16. JDK 23 Removes COMPAT Locale Provider
  17. #java‑23
  18. Java and AI? - Inside Java Newscast #72
  19. Why Update Data-Oriented Programming to Version 1.1?
  20. What Happened to Java's String Templates? Inside Java Newscast #71
  21. JDK 23 Changes Default Annotation Processing Policy
  22. When to use Data-Oriented Programming
  23. #architecture
  24. All Java 23 Features - Inside Java Newscast #70
  25. Separate Operations From Data - Data-Oriented Programming v1.1
  26. #pattern‑matching
  27. Make Illegal States Unrepresentable - Data-Oriented Programming v1.1
  28. Model Data, the Whole Data, and Nothing but the Data - Data-Oriented Programming v1.1
  29. Model Data Immutably and Transparently - Data-Oriented Programming v1.1
  30. #records
  31. Data-Oriented Programming in Java - Version 1.1
  32. Dop
  33. Module Imports in Java 23 - Inside Java Newscast #69
  34. Java Withers - Inside Java Newscast #67
  35. Java 23: Restoring the Balance with Primitive Patterns - Inside Java Newscast #66
  36. JDK 20-23: Support For Unicode CLDR Version 42
  37. #java‑20
  38. (Dirty?) Tricks in Java 22 - Inside Java Newscast #64
  39. #clean‑code
  40. Does Java 22 Kill Build Tools? - Inside Java Newscast #63
  41. #java‑22
  42. The Hottest Language You Didn't Have On Your Radar
  43. Java 22 Previews Statements Before super(...) and this(...) - Inside Java Newscast #62
  44. Java's Plans for 2024 - Inside Java Newscast #61

2023 31

  1. Java Highlights of 2023 - Inside Java Newscast #60
  2. #java‑8
  3. #turn‑of-the-year
  4. How Project Valhalla And JSpecify Can Kill NPEs
  5. #conversation
  6. Java, null, and JSpecify
  7. Java 22 Unpacking - Inside Java Newscast #59
  8. Java On The GPU - Inside Java Newscast #58
  9. Implementing New Java Stream Operations
  10. Better Java Streams with Gatherers - Inside Java Newscast #57
  11. Java Architects Answer Your Java Questions
  12. New Class-File API Will Make Java Updates Easier - Inside Java Newscast #56
  13. Java 21 Pattern Matching Tutorial
  14. #java‑21
  15. Modern Java in Action
  16. Upgrading From Java 17 To 21: All You Need To Know
  17. Java 21 is no LTS Version - Inside Java Newscast #52
  18. Java 21 - The Other Side - Inside Java Newscast #51
  19. All That is in Java 21?! 😱 - Inside Java Newscast #50
  20. Script Java Easily in 21 and Beyond - Inside Java Newscast #49
  21. Scaling Simply with Virtual Threads
  22. Save 10-20% Memory With Compact Headers - Inside Java Newscast #48
  23. Getting Rid Of Unused Variables (Finally) - Inside Java Newscast #46
  24. New (Sequenced) Collections In Java 21 - Inside Java Newscast #45
  25. #collections
  26. Java 20 🥱
  27. The Holy Grail of Java Performance - Inside Java Newscast #43
  28. Prepare Your Code Bases For Future Java - Inside Java Newscast #41
  29. Tools
  30. Java's Plans for 2023 - Inside Java Newscast #40
  31. #project‑galahad

2022 36

  1. 24 Java Features You Missed In 2022 - Inside Java Newscast #39
  2. #java‑18
  3. #java‑19
  4. From Idea to IDE - How Java Features Are Considered, Designed, And Shipped
  5. GraalVM In OpenJDK And More JavaOne Announcements - Inside Java Newscast #36
  6. #java‑17
  7. The Simplest Hello World - Inside Java Newscast #35
  8. The SolutionFactory To Java's Problems
  9. Data-Oriented Programming - Version 1.1
  10. Loom in the Java Ecosystem - Inside Java Newscast #34
  11. Java 19 in Action - Inside Java Newscast #33
  12. String Templates, JavaFX 19, Deserialization, and more at JavaOne - Inside Java Newscast #32
  13. #javafx
  14. #serialization
  15. Sequenced Collections, Purity, and more at JavaOne - Inside Java Newscast #31
  16. #lambda
  17. Java Q&A - Inside Java Newscast #30
  18. Data-Oriented Programming - Inside Java Newscast #29
  19. #patterns
  20. #techniques
  21. What is OpenJDK? - Inside Java Newscast #28
  22. Java 19 - The Best Java Release? - Inside Java Newscast #27
  23. Deconstructing Records in Pattern Matching - Inside Java Newscast #26
  24. News Grab Bag: Loom Virtual Threads, Lilliput, Pattern Matching, ... - Inside Java Newscast #25
  25. when And null In Pattern Matching - Inside Java Newscast #24
  26. How To Use switch In Modern Java
  27. #switch
  28. Virtual Thread Deep Dive - Inside Java Newscast #23
  29. All About JDK 18 - Inside Java Newscast #21
  30. Modern Java - Ask Me Anything
  31. State of Pattern Matching with Brian Goetz
  32. Configuring Maven For Compiled And Tested Code In Javadoc
  33. Compiled And Tested Code In Javadoc - Inside Java Newscast #20
  34. More Opinions On Optional
  35. Where to use Optional - Inside Java Newscast #19
  36. Java's Plans for 2022 - Inside Java Newscast #18

2021 41

  1. Project Loom Brings Structured Concurrency - Inside Java Newscast #17
  2. What Happens to Finalization in JDK 18? - Inside Java Newscast #15
  3. 11 Tricks From dev.java - Inside Java Newscast #14
  4. #generics
  5. Faster LTS and free JDK with Java 17 - Inside Java Newscast #12
  6. Better Random Number Generation in Java 17
  7. The State of Project Valhalla with Brian Goetz
  8. Fast and Secure Inter-process Communication on JDK 16 - Inside Java Newscast #11
  9. #java‑16
  10. Random Numbers and JDK Flight Recorder - Inside Java Newscast #9
  11. Incremental Evolution, Pattern Switches vs Visitor Pattern, and Wayland Support - Inside Java Newscast #8
  12. Visitor Pattern Considered Pointless - Use Pattern Switches Instead
  13. Handling null and Upgrading Past Java 8 - Inside Java Newscast #7
  14. The State of Project Panama with Maurizio Cimadamore
  15. Java Modules in Real Life
  16. The State of Project Loom with Ron Pressler
  17. Java 17: Features and Development - Inside Java Newscast #6
  18. Pattern Matching in Switches and Security Manager Deprecation - Inside Java Newscast #5
  19. 26 Hours of Java
  20. 5 Secret Java API Tricks and Record Semantics - Inside Java Newscast #4
  21. Why Java's Records Are Better* Than Lombok's @Data and Kotlin's Data Classes
  22. Rant
  23. Why Don't They Just... ?! The Deliberations Behind Evolving Java
  24. JUnit Pioneer - An Exploratory Mission to Jupiter And Beyond
  25. #junit‑pioneer
  26. Quicker Java and JDK 16 compatibility - Inside Java Newscast #3
  27. #vector
  28. Java Generics III - Wildcards
  29. Java Generics II - Bounded Type Parameters
  30. Vector API, Record Serialization, And Java 17 Release Schedule - Inside Java Newscast #2
  31. Java 16 Rundown, First Of Java 17 - Inside Java Newscast #1
  32. To Jupiter And Beyond - On An Exploratory Mission With JUnit Pioneer
  33. Definitive Guide To Java 16
  34. Patterns, switch, and Valhalla's Primitive Classes - JDK News #2
  35. Code-First Unix Domain Socket Tutorial
  36. Type Pattern Matching with instanceof
  37. Pattern Matching in Java
  38. Java's Quirks and Wrong (?) Defaults with Brian Goetz
  39. Pattern Matching Quartet - JDK News #1
  40. Sorting A React App Into Java's Folder Structure
  41. #js

2020 14

  1. Java 2077
  2. Broken Stream::group with Java 16's mapMulti
  3. Faster flatMaps with Stream::mapMulti in Java 16
  4. Java Modules Cheat Sheet
  5. #java‑11
  6. #java‑9
  7. JUnit Pioneer 1.0
  8. #testing
  9. Imprint
  10. License
  11. Java Generics I - The Basics
  12. 25 Hours of Java
  13. Modularity with Oliver Drotbohm
  14. Java After Seventeen

2019 20

  1. How We Upgraded From Java 8 And Why You Can (And Should) Do It Too
  2. Definitive Guide To Java 13
  3. #java‑13
  4. Improve Launch Times On Java 13 With Application Class-Data Sharing
  5. #java‑10
  6. #java‑12
  7. Definitive Guide To Switch Expressions In Java 13
  8. The JPMS Maturity Model
  9. Evolving Java With ––enable–preview aka Preview Language Features
  10. Definitive Guide To Text Blocks In Java 13
  11. Best Practices Considered Harmful
  12. Immutable Collections In Java - Not Now, Not Ever
  13. The Java Module System with Sander Mak
  14. Caliz III: Hashing scripts and background compilation
  15. Jakarta EE, javax, And A Week Of Turmoil
  16. Caliz II: Wrapping Graal AOT
  17. Caliz I: Wrapping JVM 11 and learning about Graal AOT
  18. Definitive Guide To Java 12
  19. Teeing Collector in Java 12
  20. Java 12 Experiments (Live Stream)

2018 29

  1. Utilities, Singletons and Dependency Injection - Effective Java, Items 3-5
  2. #book‑club
  3. Eleven Hidden Gems In Java 11
  4. Fun with var
  5. #default‑methods
  6. Var
  7. Scripting Java 11, Shebang And All
  8. Maven 3 / 4 / 5 with Robert Scholte
  9. Reactive HTTP/2 Requests And Responses In Java 11
  10. First Contact with Switch Expressions in Java 12
  11. Java 11 HTTP/2 API Tutorial
  12. Use Builders... Cautiously - Effective Java, Item 2
  13. Java 11: A New Dawn - Releases, Oracle JDK vs OpenJDK, and LTS
  14. All You Need To Know For Migrating To Java 11
  15. Static Factory Methods - Effective Java, Item 1
  16. Kicking off a series on Effective Java, Third Edition
  17. JUnit 5 Architecture or "What's Jupiter?"
  18. JUnit 5 Basics: @Test, Lifecycle, Assertions, Assumptions, And More
  19. JUnit 5 Conditions: @Enabled, @Disabled, Customized
  20. JUnit 5 - Dynamic Tests
  21. JUnit 5 Extension Model: How To Create Your Own Extensions
  22. JUnit 5 Setup in IntelliJ, Eclipse, Maven, and Gradle
  23. JUnit 5 - Parameterized Tests
  24. #junit‑5
  25. Unlocking Traits With var
  26. Tricks with var and anonymous classes (that you should never use at work)
  27. Unlocking Intersection Types With var
  28. How To Use Multi-release JARs To Target Multiple Java Versions
  29. Code-First Java 9 Tutorial

2017 24

  1. Goodbye 2017, Hello 2018
  2. Maven on Java 9 and later - Six Things You Need To Know
  3. First Contact With 'var' In Java 10
  4. First contact with var in Java 10
  5. Making JSR 305 Work On Java 9
  6. Code-First Java Module System Tutorial
  7. Unified Logging Of JVM Messages With The -Xlog Option
  8. Welcome, Java 9!
  9. Impressions of JavaZone 2017
  10. Five Command Line Options To Hack The Java Module System
  11. Planning Your Java 9 Update
  12. Jdeps
  13. To JAR Hell And Back
  14. Java 9 Migration Guide: The Seven Most Common Challenges
  15. A JDeps Tutorial - Analyze Your Project's Dependencies
  16. Java 9 Resources - Talks, Articles, Repos, Blogs, Books And Courses
  17. Optional Dependencies with requires static
  18. Parameterized Tests in JUnit 5
  19. Repackaging Exceptions In Streams
  20. Expert Java 8
  21. Why Elvis Should Not Visit Java
  22. SPJCN IV: Quo Vadis Scala
  23. Reflection vs Encapsulation
  24. Hello 2017!

2016 31

  1. Goodbye 2016, Sorry For Fucking Up
  2. SPJCN III: JavaOne 2016
  3. Publishing Snapshots With Gradle's maven-publish Plugin
  4. SPJCN II: What's Taking So Long?
  5. Rewrite, Architecture, Extensions Of JUnit 5
  6. What Future Java Might Look Like
  7. SPJCN I: Hello World
  8. Code Reviews At Disy - Observations
  9. #code‑review
  10. Code Reviews At Disy - How We Review
  11. The Ultimate Guide To Java 9
  12. Rebutting 5 Common Stream Tropes
  13. Code Reviews At Disy - Where We Were And What We Wanted
  14. Goodbye Disy, Hello SitePoint
  15. Oh No, I Forgot Stream::iterate!
  16. Java 9 Additions To Optional
  17. Comment Your &*☠# Code!
  18. Java 9 Additions To Stream
  19. How To Implement hashCode Correctly
  20. How To Implement equals Correctly
  21. JEEConf 2016
  22. JUnit 5
  23. CodeFX Leveled Up
  24. A Doomed Code Review
  25. Seven Reasons Against Blogging
  26. The Java Module System Beyond The Basics
  27. Building Atom On Gentoo
  28. Costs And Benefits Of Comments
  29. Implied Readability With requires transitive
  30. Beware Of findFirst() And findAny()
  31. Hello 2016!

2015 46

  1. Goodbye 2015!
  2. Jigsaw Hands-On Guide
  3. JDeps Maven Plugin 0.2 Released
  4. Six-Month Delay Of Java 9 Release
  5. JUnit Lambda - The Prototype
  6. JavaOne 2015: Under The Hood Of Project Jigsaw
  7. #impulse
  8. JavaOne 2015: Advanced Modular Development
  9. JavaOne 2015: Introduction to Modular Development
  10. JavaOne 2015: Prepare For JDK 9
  11. Will There Be Module Hell?
  12. JAR Hell
  13. Apache JMeter Tutorial
  14. A Taxonomy Of Comments
  15. Stream Performance - Your Ideas
  16. Stream Performance
  17. Java 8 SE Optional, a strict approach
  18. Interview About Comments On DZone
  19. Impulse: "Adventures On The Road to Valhalla"
  20. All About Project Jigsaw On InfoQ
  21. Thoughts On Comments
  22. Comment Your Fucking Code!
  23. #clean‑comments
  24. Casting In Java 8 (And Beyond?)
  25. The Features Project Jigsaw Brings To Java 9
  26. Motivation And Goals Of Project Jigsaw
  27. #project‑jigsaw
  28. LibFX 0.3.0 Released
  29. Libfx
  30. Transforming Collections
  31. JavaFX, Project Jigsaw and JEP 253
  32. First Release of JDeps Maven Plugin
  33. Impulse: "Crafted Design"
  34. LibFX 0.2.1 Released
  35. How Java 9 And Project Jigsaw May Break Your Code
  36. Getting Rid Of Anonymous Classes
  37. Interface Evolution With Default Methods – Part II: Interfaces
  38. Impulse: "Agile Architecture"
  39. Roll Your Own Pirate-Elvis Operator
  40. Test Collection Implementations with Guava
  41. Interface Evolution With Default Methods - Part I: Methods
  42. Value-Based Classes
  43. Running Android Emulator With HAXM On Thinkpad T440p
  44. Everything You Need To Know About Default Methods
  45. New Javadoc Tags @apiNote, @implSpec, and @implNote
  46. Hello 2015!

2014 21

  1. Goodbye 2014!
  2. Instances of Non-Capturing Lambdas
  3. Multiple Return Statements
  4. Don't Remove Listeners - Use ListenerHandles
  5. LibFX 0.2.0 Released
  6. JavaFX Sources in Eclipse
  7. Impulse: "Lambdas In Java: A Peek Under The Hood"
  8. Serialize Optional
  9. The Serialization Proxy Pattern
  10. Concepts of Serialization
  11. Why Isn't Optional Serializable?
  12. The Design of Optional
  13. Intention Revealing Code With Optional
  14. #optional
  15. Impulse: "Architecture - The Lost Years"
  16. The Decorator Pattern With Default Methods
  17. Impulse: "Workflows of Refactoring"
  18. How The Decorator Pattern Saved My Day
  19. CodeFX Up And Running
  20. LibFX 0.1.1 Released
  21. Foobar

Undated 2

  1. #ALL‑TAGS
  2. #record‑args