<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://p0f.net/index.php?action=history&amp;feed=atom&amp;title=New_Features_in_Java_12_through_15</id>
		<title>New Features in Java 12 through 15 - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://p0f.net/index.php?action=history&amp;feed=atom&amp;title=New_Features_in_Java_12_through_15"/>
		<link rel="alternate" type="text/html" href="https://p0f.net/index.php?title=New_Features_in_Java_12_through_15&amp;action=history"/>
		<updated>2026-04-07T01:58:12Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://p0f.net/index.php?title=New_Features_in_Java_12_through_15&amp;diff=30&amp;oldid=prev</id>
		<title>Gregab: /* What I assume */ change reqs</title>
		<link rel="alternate" type="text/html" href="https://p0f.net/index.php?title=New_Features_in_Java_12_through_15&amp;diff=30&amp;oldid=prev"/>
				<updated>2021-01-18T12:04:35Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;What I assume: &lt;/span&gt; change reqs&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 12:04, 18 January 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot; &gt;Line 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* fluent in the Java language (according to v11 language specification)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* fluent in the Java language (according to v11 language specification)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* aware of how Java garbage collectors work and why we need them&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* aware of how Java garbage collectors work and why we need them&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;familiar with &lt;/del&gt;what software &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;profiling and auditing &lt;/del&gt;are and &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;how &lt;/del&gt;they &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;work&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;have a clue about &lt;/ins&gt;what &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Linux &lt;/ins&gt;software &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;packages &lt;/ins&gt;are and &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;what &lt;/ins&gt;they &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;do&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* have a clue about Linux scripting&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Language =&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Language =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Gregab</name></author>	</entry>

	<entry>
		<id>https://p0f.net/index.php?title=New_Features_in_Java_12_through_15&amp;diff=29&amp;oldid=prev</id>
		<title>Gregab: Typo.</title>
		<link rel="alternate" type="text/html" href="https://p0f.net/index.php?title=New_Features_in_Java_12_through_15&amp;diff=29&amp;oldid=prev"/>
				<updated>2021-01-18T11:25:34Z</updated>
		
		<summary type="html">&lt;p&gt;Typo.&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 11:25, 18 January 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Introduction =&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Introduction =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;JDK versions just keep coming, and since my last article about [[Changes in Java 10 and 11|new features in Java v10 and v11]], there have been &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;three &lt;/del&gt;new major Java releases with a number of interesting (and useful) new features.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;JDK versions just keep coming, and since my last article about [[Changes in Java 10 and 11|new features in Java v10 and v11]], there have been &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;four &lt;/ins&gt;new major Java releases with a number of interesting (and useful) new features.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= What I assume =&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= What I assume =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Gregab</name></author>	</entry>

	<entry>
		<id>https://p0f.net/index.php?title=New_Features_in_Java_12_through_15&amp;diff=28&amp;oldid=prev</id>
		<title>Gregab: Placeholders with links and metadata.</title>
		<link rel="alternate" type="text/html" href="https://p0f.net/index.php?title=New_Features_in_Java_12_through_15&amp;diff=28&amp;oldid=prev"/>
				<updated>2021-01-18T11:25:00Z</updated>
		
		<summary type="html">&lt;p&gt;Placeholders with links and metadata.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
JDK versions just keep coming, and since my last article about [[Changes in Java 10 and 11|new features in Java v10 and v11]], there have been three new major Java releases with a number of interesting (and useful) new features.&lt;br /&gt;
&lt;br /&gt;
= What I assume =&lt;br /&gt;
&lt;br /&gt;
I assume that you are:&lt;br /&gt;
&lt;br /&gt;
* fluent in the Java language (according to v11 language specification)&lt;br /&gt;
* aware of how Java garbage collectors work and why we need them&lt;br /&gt;
* familiar with what software profiling and auditing are and how they work&lt;br /&gt;
* have a clue about Linux scripting&lt;br /&gt;
&lt;br /&gt;
= Language =&lt;br /&gt;
&lt;br /&gt;
== Switch Expressions (v12) ==&lt;br /&gt;
&lt;br /&gt;
* JEP: https://openjdk.java.net/jeps/325&lt;br /&gt;
&lt;br /&gt;
Lifecycle phases:&lt;br /&gt;
&lt;br /&gt;
* v12: preview&lt;br /&gt;
* v13: preview&lt;br /&gt;
* v14: standard&lt;br /&gt;
&lt;br /&gt;
== Text Blocks (v13) ==&lt;br /&gt;
&lt;br /&gt;
* JEP: https://openjdk.java.net/jeps/355&lt;br /&gt;
&lt;br /&gt;
Lifecycle phases:&lt;br /&gt;
&lt;br /&gt;
* v13: preview&lt;br /&gt;
* v14: second preview&lt;br /&gt;
* v15: standard&lt;br /&gt;
&lt;br /&gt;
== Pattern Matching for instanceof (v14) ==&lt;br /&gt;
&lt;br /&gt;
* JEP: https://openjdk.java.net/jeps/305&lt;br /&gt;
&lt;br /&gt;
Lifecycle phases:&lt;br /&gt;
&lt;br /&gt;
* v14: preview&lt;br /&gt;
* v15: second preview&lt;br /&gt;
&lt;br /&gt;
== Records (v14) ==&lt;br /&gt;
&lt;br /&gt;
* JEP: https://openjdk.java.net/jeps/359&lt;br /&gt;
&lt;br /&gt;
Lifecycle phases:&lt;br /&gt;
&lt;br /&gt;
* v14: preview&lt;br /&gt;
* v15: second preview&lt;br /&gt;
&lt;br /&gt;
== Sealed Classes (v15) ==&lt;br /&gt;
&lt;br /&gt;
* JEP: https://openjdk.java.net/jeps/360&lt;br /&gt;
&lt;br /&gt;
Lifecycle phases:&lt;br /&gt;
&lt;br /&gt;
* v15: preview&lt;br /&gt;
&lt;br /&gt;
= Virtual Machine =&lt;br /&gt;
&lt;br /&gt;
== Shenandoah Garbage Collector (v12) ==&lt;br /&gt;
&lt;br /&gt;
Lifecycle phases:&lt;br /&gt;
&lt;br /&gt;
* v12: experimental&lt;br /&gt;
* v15: GA&lt;br /&gt;
&lt;br /&gt;
== Abortable Mixed Collections for G1 (v12) ==&lt;br /&gt;
&lt;br /&gt;
https://openjdk.java.net/jeps/344&lt;br /&gt;
&lt;br /&gt;
Make G1 mixed collections abortable if they might exceed the pause target.&lt;br /&gt;
&lt;br /&gt;
== Promptly Return Unused Committed Memory from G1 (v12) ==&lt;br /&gt;
&lt;br /&gt;
https://openjdk.java.net/jeps/346&lt;br /&gt;
&lt;br /&gt;
G1 only returns memory from the Java heap at either a full GC or during a concurrent cycle. Since G1 tries hard to completely avoid full GCs, and only triggers a concurrent cycle based on Java heap occupancy and allocation activity, it will not return Java heap memory in many cases unless forced to do so externally.&lt;br /&gt;
&lt;br /&gt;
This feature enhances the G1 garbage collector to automatically return Java heap memory to the operating system when idle.&lt;br /&gt;
&lt;br /&gt;
== Return Unused Memory to OS from ZGC (v13) ==&lt;br /&gt;
&lt;br /&gt;
* JEP: https://openjdk.java.net/jeps/351&lt;br /&gt;
&lt;br /&gt;
== Bye-bye, CMS (v14) ==&lt;br /&gt;
&lt;br /&gt;
* JEP: https://openjdk.java.net/jeps/363&lt;br /&gt;
&lt;br /&gt;
== Hidden Classes (v15) ==&lt;br /&gt;
&lt;br /&gt;
* JEP: https://openjdk.java.net/jeps/371&lt;br /&gt;
&lt;br /&gt;
= Tools =&lt;br /&gt;
&lt;br /&gt;
== New OS-Native Packaging Tool for Self-Contained Apps (v14) ==&lt;br /&gt;
&lt;br /&gt;
* JEP: https://openjdk.java.net/jeps/343&lt;br /&gt;
&lt;br /&gt;
Lifecycle phases:&lt;br /&gt;
&lt;br /&gt;
* v14: incubator&lt;br /&gt;
&lt;br /&gt;
== Better NullPointerException Messages (v14) ==&lt;br /&gt;
&lt;br /&gt;
* JEP: https://openjdk.java.net/jeps/358&lt;/div&gt;</summary>
		<author><name>Gregab</name></author>	</entry>

	</feed>