{"id":15042994,"url":"https://github.com/wesleyegberto/java-new-features","last_synced_at":"2025-05-16T08:03:12.608Z","repository":{"id":64698454,"uuid":"71030230","full_name":"wesleyegberto/java-new-features","owner":"wesleyegberto","description":"Exploring Java features from 8 to 25","archived":false,"fork":false,"pushed_at":"2025-05-03T18:16:10.000Z","size":3110,"stargazers_count":305,"open_issues_count":0,"forks_count":92,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-05-03T19:24:46.068Z","etag":null,"topics":["java-10","java-11","java-12","java-13","java-14","java-15","java-16","java-17","java-18","java-19","java-20","java-21","java-22","java-23","java-24","java-25","java-8","java-9"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wesleyegberto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-10-16T04:34:47.000Z","updated_at":"2025-05-03T18:16:13.000Z","dependencies_parsed_at":"2023-12-19T06:28:44.198Z","dependency_job_id":"ccfa1b86-ce3c-49cf-abea-1985a7d58f28","html_url":"https://github.com/wesleyegberto/java-new-features","commit_stats":{"total_commits":165,"total_committers":3,"mean_commits":55.0,"dds":"0.018181818181818188","last_synced_commit":"e60ceda19aec09ca91af18ac197edb25234d1374"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wesleyegberto%2Fjava-new-features","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wesleyegberto%2Fjava-new-features/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wesleyegberto%2Fjava-new-features/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wesleyegberto%2Fjava-new-features/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wesleyegberto","download_url":"https://codeload.github.com/wesleyegberto/java-new-features/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254493381,"owners_count":22080126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java-10","java-11","java-12","java-13","java-14","java-15","java-16","java-17","java-18","java-19","java-20","java-21","java-22","java-23","java-24","java-25","java-8","java-9"],"created_at":"2024-09-24T20:48:26.013Z","updated_at":"2025-05-16T08:03:12.603Z","avatar_url":"https://github.com/wesleyegberto.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java New Features\n\nA project to explore more about the new features from Java 8 through Java 21.\n\n[JDK Release Notes](https://www.oracle.com/java/technologies/javase/jdk-relnotes-index.html)\n\n## OpenJDK Projects\n\n* [Valhalla](./projects/valhalla/): enhance Java object model with value objects and primitive values.\n* [Loom](./projects/loom/): project to bring user-mode threads.\n\n## Resume by Version\n\n* [Java 25](java-25/)\n  * Stable Values (Preview)\n  * Remove the 32-bit x86 Port\n  * Module Import Declarations\n  * Compact Source Files and Instance Main Methods\n  * Flexible Constructor Bodies\n  * Structured Concurrency (preview 5)\n\n* [Java 24](java-24/) (Mar, 2025)\n  * Generational Shenandoah (experimental)\n  * Compact Object Headers (experimental)\n  * Prepare to Restrict the Use of JNI\n  * Late Barrier Expansion for G1\n  * Key Derivation Function API (preview)\n  * Remove the Windows 32-bit x86 Port\n  * Ahead-of-Time Class Loading \u0026 Linking\n  * Class-File API\n  * Steam Gatherers\n  * Permanently Disable the Security Manager\n  * Scoped Values (preview 4)\n  * Primitive Types in Patterns, instanceof, and switch (preview 2)\n  * Vector API (incubator)\n  * ZGC Remove the Non-Generational Mode\n  * Synchronize Virtual Threads without Pinning\n  * Flexible Constructor Bodies (preview 3)\n  * Linking Run-Time Images without JMODs\n  * Module Import Declarations (preview 2)\n  * Simple Source Files and Instance Main Mathods (preview 4)\n  * Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism\n  * Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm\n  * Warn Upon Use of Memory-Access Methods in sun.misc.Unsafe\n  * Structured Concurrency (preview 4)\n  * Deprecate the 32-bit x86 Port for Removal\n\n* [Java 23](java-23/) (Sep, 2024)\n  * Primitive Types in Patterns, `instanceof` and `switch` (preview)\n  * Class-File API (preview 2)\n  * Markdown Documentation Comments\n  * Vector API (incubator)\n  * Stream Gatherers (preview 2)\n  * Deprecate the Memory-Access Methods in Unsafe for Removal\n  * ZGC Generational Mode by Default\n  * Module Import Declarations (preview)\n  * Implicitly Declared Classes and Instance Main Methods (preview 3)\n  * Structured Concurrency (preview 3)\n  * Scoped Value (preview 3)\n  * Flexible Constructor Bodies (preview 2)\n\n* [Java 22](java-22/) (Mar, 2024)\n  * Region Pinning for G1\n  * Statements before `super` (preview)\n  * FFM API (standard)\n  * Unnamed Variable \u0026 Patterns\n  * Class-File API (preview)\n  * Launch Multi-File Source-Code Programs\n  * String Templates (preview 2)\n  * Vector API (incubator)\n  * Stream Gatherers (preview)\n  * Structured Concurrency (preview 2)\n  * Scoped Value (preview 2)\n  * Implicity Declared Classes and Instance Main Methods (preview 2)\n\n* [Java 21](java-21/) (LTS; Sep, 2023)\n  * String Templates (preview)\n  * Sequenced Collections\n  * Generational ZGC\n  * Record Pattern (standard) :rocket:\n  * Pattern Matching for `switch` (standard) :rocket:\n  * Foreign Function \u0026 memory API (preview 3)\n  * Unnamed Patterns and Variables (preview)\n  * Virtual Threads (standard) :rocket:\n  * Unnamed Classes and Instance Main Methods (preview)\n  * Scoped Value (preview)\n  * Vector API (incubator)\n  * Deprecate the Windows 32-bit x86 Port for Removal\n  * Prepare to Disallow the Dynamic Loading of Agents\n  * KEM API\n  * Structured Concurrency (preview)\n\n* [Java 20](java-20/) (Mar, 2023)\n  * Scoped values (incubator)\n  * Record pattern (preview 2)\n  * Pattern matching for `switch` (preview 4)\n  * Foreign Function \u0026 memory API (preview 2)\n  * Virtual Threads (preview 2)\n  * Structured concurrency (second incubator)\n  * Vector API (incubator)\n\n* [Java 19](java-19/) (Sep, 2022)\n  * Virtual Thread (preview) :rocket:\n  * Pattern matching for `switch` (preview 3)\n  * Vector API (fourth incubator)\n  * Record pattern (preview)\n  * Structured concurrency (incubator)\n\n* [Java 18](java-18/) (Mar, 2022)\n  * UTF-8 by Default\n  * Simple Web Server\n  * Code Snippets in Java API Documentation\n  * Pattern matching for `switch` (preview 2)\n  * Deprecated method `finalize`\n\n* [Java 17](java-17/) (LTS; Sep, 2021)\n  * Restore Always-Strict Floating-Point Semantics\n  * Enhanced Pseudo-Random Number Generator\n  * New macOS rendering for Java 2D API\n  * macOS/AArch64 Port\n  * Deprecate the Applet API for Removal\n  * Strongly Encapsulate JDK Internals\n  * Pattern matching for `switch` (preview)\n  * Remove RMI Activation\n  * Sealed Classes (standard)\n  * Remove the experimental AOT and JIT compiler\n  * Deprecate the Security Manager for Removal\n  * Foreign Function \u0026 Memory API (incubator)\n  * Vector API (fourth incubator)\n  * Context-Specific Deserialization Filters\n\n* [Java 16](java-16/) (Mar, 2021)\n  * Records (standard)\n  * Pattern matching for `instanceof` (standard)\n  * Sealed classes (preview 2)\n  * Unix-Domain Socket Channels\n  * Warnings for Value-Based Classes\n  * Foreign-Memory Access API (incubator)\n  * Vector API (incubator)\n  * Foreign Linker API (incubator)\n  * Packaging Tool\n\n* [Java 15](java-15/) (Sep, 2020)\n  * Sealed classes (preview)\n  * Hidden classes\n  * DatagramSocket reimplementation\n  * Pattern matching for `instanceof` (preview 2)\n  * Records (preview 2)\n  * Foreign-Memory Access API (incubator)\n  * GCs ZGC and Shenandoah turned final\n\n* [Java 14](java-14/) (Mar, 2020)\n  * Switch expression (standard)\n  * Pattern matching for `instanceof` (preview)\n  * Text blocks improvements (preview 2)\n  * Records (preview)\n  * Helpful NullPointerExceptions\n  * Packaging tool\n  * JFR even streaming\n\n* [Java 13](java-13/) (Sep, 2019)\n  * Switch expression (preview 2)\n  * Text blocks (preview)\n  * String API updates\n  * NIO updates\n  * Socket and ServerSocket reimplementation (Project Loom)\n  * Dynamic CDS Archives\n  * ZGC: Uncommit Unused Memory\n\n* [Java 12](java-12/) (Mar, 2019)\n  * Switch expression (preview)\n  * Compact Number Format\n  * Collectors improvements\n  * CompletableFuture improvements\n  * CDS enable by default\n  * New GC and improvements\n\n* [Java 11](java-11/) (LTS; Sep, 2018)\n  * Removal of Java EE Modules, JavaFX and deprecated API\n  * Http Client (incubator)\n  * var in lambda expressions\n  * API improvements\n  * Null I/O\n\n* [Java 10](java-10/) (Mar, 2018)\n  * Process API improvements\n  * Collections improvements\n  * Application Class-Data Sharing\n  * `var` keyword to declare variables\n\n* [Java 9](java-9/) (Sep, 2017)\n  * Milling Project Coin\n  * Process API\n  * Platform Logging API and Service\n  * Concurrency improvements\n  * Collections improvements\n  * Project Jigsaw\n  * Segmented code cache\n  * JShell\n  * much more (see JEPs)\n\n* [Java 8](java-8/) (Marc, 2014)\n  * API\n  * Stream API\n  * Project Lambda\n  * Repeating annotations\n\n## Running\n\n### Java and Javac\n\nYou will need to provide the flag to enable preview and the number of Java version:\n\n```bash\njava --enable-preview --source 21 SourceCode.java\n\njavac --enable-preview --source 21 SourceCode.java\n```\n\n### JShell\n\nTo use JShell you can use the following flag:\n\n```bash\njshell --enable-preview\n```\n\n### Maven\n\n* Maven: 3.5.0\n  * compiler plugin: 3.8.0\n  * surefire and failsafe: 2.22.0\n  * plugins using ASM (e.g. the shade plugin) will likely need to be updated as well\n\n  To run the examples with Maven use:\n\n```xml\n\u003cplugin\u003e\n    \u003cartifactId\u003emaven-compiler-plugin\u003c/artifactId\u003e\n    \u003cconfiguration\u003e\n        \u003crelease\u003e${java.version}\u003c/release\u003e\n        \u003ccompilerArgs\u003e--enable-preview\u003c/compilerArgs\u003e\n    \u003c/configuration\u003e\n\u003c/plugin\u003e\n\u003cplugin\u003e\n    \u003cartifactId\u003emaven-surefire-plugin\u003c/artifactId\u003e\n    \u003cconfiguration\u003e\n        \u003cargLine\u003e--enable-preview\u003c/argLine\u003e\n    \u003c/configuration\u003e\n\u003c/plugin\u003e\n\u003cplugin\u003e\n    \u003cartifactId\u003emaven-failsafe-plugin\u003c/artifactId\u003e\n    \u003cconfiguration\u003e\n        \u003cargLine\u003e--enable-preview\u003c/argLine\u003e\n    \u003c/configuration\u003e\n\u003c/plugin\u003e\n```\n\n## Migration Guide\n\nChecking deprecated APIs from a JDK version:\n\n```sh\njdeprscan --release \u003cJdk_Version\u003e -l --for-removal\n```\n\n## Helpful Links\n\n* [OpenJDK Projects](https://openjdk.java.net/projects/)\n* [JDK Update Releases](https://openjdk.org/projects/jdk-updates/)\n* [The Java Version Almanac](https://javaalmanac.io/)\n* [Dev.java - tutorials, news and more](https://dev.java/)\n  * [Java Platform Evolution](https://dev.java/evolution/)\n  * [Learn Java](https://dev.java/learn/)\n  * [Java Playground](https://dev.java/playground/)\n* [Inside.java - Sip of Java](https://inside.java/2021/10/21/sip24/)\n* [Learn.java](https://learn.java/)\n* Download Java versions:\n  * [The Role of Preview Features in Java and Beyond](https://blogs.oracle.com/javamagazine/the-role-of-previews-in-java-14-java-15-java-16-and-beyond)\n  * [Place to get early releases from Oracle's JDK](https://jdk.java.net/)\n  * [Oracle - Java Binaries Archive](https://www.oracle.com/java/technologies/downloads/archive/#JavaSE)\n  * [Archived OpenJDK General-Availability Releases](https://jdk.java.net/archive/)\n* [Considerations Bumping Java EE](https://vorozco.com/blog/2020/2020-08-21-considerations-bumping-javaee.html)\n* Migration tools:\n  * [Migrating From JDK 8 to Later JDK Releases](https://docs.oracle.com/en/java/javase/17/migrate/migrating-jdk-8-later-jdk-releases.html#GUID-7744EF96-5899-4FB2-B34E-86D49B2E89B6)\n  * [Eclipse Migration Toolkit for Java (EMT4J) Simplifies Upgrading Java Applications](https://www.infoq.com/news/2022/12/eclipse-migration-toolkit-java/)\n  * [Rewrite - Migrate to Java 17](https://docs.openrewrite.org/running-recipes/popular-recipe-guides/migrate-to-java-17)\n* Presentations:\n  * [The Amazing Features of Modern Java - Venkat Subramaniam](https://youtu.be/nlZe-y2XvQY)\n* Java Projects:\n  * [Project Leyden - Capturing Lightning in a Bottle](https://www.youtube.com/watch?v=lnth19Kf-x0\u0026ab_channel=Java)\n* Blogs:\n  * [JDK Security Enhancements - Sean Mullan](https://seanjmullan.org/blog/)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwesleyegberto%2Fjava-new-features","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwesleyegberto%2Fjava-new-features","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwesleyegberto%2Fjava-new-features/lists"}