{"id":870,"date":"2025-11-22T23:42:51","date_gmt":"2025-11-22T23:42:51","guid":{"rendered":"https:\/\/choudhury.com\/blog\/?p=870"},"modified":"2025-11-22T23:58:33","modified_gmt":"2025-11-22T23:58:33","slug":"experimenting-with-valhalla-early-access-build-26-jep401ea21-1-2025-10-10","status":"publish","type":"post","link":"https:\/\/choudhury.com\/blog\/2025\/11\/22\/experimenting-with-valhalla-early-access-build-26-jep401ea21-1-2025-10-10\/","title":{"rendered":"Experimenting with Valhalla Early Access Build 26-jep401ea2+1-1 (2025\/10\/10)"},"content":{"rendered":"\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>A new build of Valhalla has been made available on <a href=\"https:\/\/jdk.java.net\/valhalla\/\">https:\/\/jdk.java.net\/valhalla\/<\/a> this version is built on top Java 26 early build.<\/p>\r\n\r\n\r\n\r\n<p>It&#8217;s been a while since I tried to the previous <a href=\"\/blog\/2022\/08\/13\/experimenting-with-java-valhalla\/\">Valhalla Early access in 2022<\/a><\/p>\r\n\r\n\r\n\r\n<p>A lot has has changed since then.<\/p>\r\n\r\n\r\n\r\n<p>In the previous version they had concept of <strong>value<\/strong> (without identity) and <strong>primitive<\/strong> class (without identity and not nullable)<\/p>\r\n\r\n\r\n\r\n<p>Now they have simplified to value class (without identity)<\/p>\r\n\r\n\r\n\r\n<p>Whether a value can be nullable is or not, will be delivered separately by this <a href=\"https:\/\/openjdk.org\/jeps\/8316779\" data-type=\"link\" data-id=\"https:\/\/openjdk.org\/jeps\/8316779\">JEP draft: Null-Restricted Value Class Types (Preview)<\/a><\/p>\r\n\r\n\r\n\r\n<p>Reference Code &#8211; No Value class<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\">\n\n<div class=\"codecolorer-container java default\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><div class=\"java codecolorer\"><span class=\"kw1\">public<\/span> <span class=\"kw1\">class<\/span> Main <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> main<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw4\">long<\/span> start <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">currentTimeMillis<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw4\">int<\/span> length <span class=\"sy0\">=<\/span> <span class=\"nu0\">10<\/span>_000_000<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; Point3D<span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> myArray <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> Point3D<span class=\"br0\">&#91;<\/span>length<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span> i <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span> i <span class=\"sy0\">&amp;<\/span>lt<span class=\"sy0\">;<\/span> myArray.<span class=\"me1\">length<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">++<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myArray<span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">new<\/span> Point3D<span class=\"br0\">&#40;<\/span>0f, 0f, 0f<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Print last value of array : &quot;<\/span><span class=\"sy0\">+<\/span>myArray<span class=\"br0\">&#91;<\/span>length<span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+runtime\"><span class=\"kw3\">Runtime<\/span><\/a>.<span class=\"me1\">getRuntime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">gc<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; printMemoryUsage<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Array length : &quot;<\/span><span class=\"sy0\">+<\/span>myArray.<span class=\"me1\">length<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Total time &quot;<\/span><span class=\"sy0\">+<\/span><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">currentTimeMillis<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-<\/span> start<span class=\"br0\">&#41;<\/span><span class=\"sy0\">+<\/span> <span class=\"st0\">&quot; ms&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">private<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> printMemoryUsage<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;MB: &quot;<\/span> <span class=\"sy0\">+<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">double<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+runtime\"><span class=\"kw3\">Runtime<\/span><\/a>.<span class=\"me1\">getRuntime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">totalMemory<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+runtime\"><span class=\"kw3\">Runtime<\/span><\/a>.<span class=\"me1\">getRuntime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">freeMemory<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">\/<\/span> <span class=\"br0\">&#40;<\/span><span class=\"nu0\">1024<\/span><span class=\"sy0\">*<\/span><span class=\"nu0\">1024<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">static<\/span> <span class=\"kw1\">class<\/span> Point3D <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">private<\/span> <span class=\"kw4\">float<\/span> x <span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">private<\/span> &nbsp;<span class=\"kw4\">float<\/span> y <span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">private<\/span> &nbsp;<span class=\"kw4\">float<\/span> z <span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">public<\/span> Point3D<span class=\"br0\">&#40;<\/span><span class=\"kw4\">float<\/span> x, <span class=\"kw4\">float<\/span> y, <span class=\"kw4\">float<\/span> z<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">x<\/span> <span class=\"sy0\">=<\/span> x<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">y<\/span> <span class=\"sy0\">=<\/span> y<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">z<\/span> <span class=\"sy0\">=<\/span> z<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; @Override<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">public<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> toString<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"st0\">&quot;Point3D{&quot;<\/span> <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;x=&quot;<\/span> <span class=\"sy0\">+<\/span> x <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;, y=&quot;<\/span> <span class=\"sy0\">+<\/span> y <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;, z=&quot;<\/span> <span class=\"sy0\">+<\/span> z <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">'}'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n\n<\/pre>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>If I run this on my machine I get this output<\/p>\r\n\r\n\r\n\r\n<p>Print last value of array : Point3D{x=0.0, y=0.0, z=0.0}<br \/><strong>MB: 269.9514617919922<br \/><\/strong>Array length : 10000000<br \/><strong>Total time 182 ms<\/strong><\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>Now if I do the same using Value class (make Point3D value class)<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\">\n\n<div class=\"codecolorer-container java default\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><div class=\"java codecolorer\"><span class=\"kw1\">public<\/span> <span class=\"kw1\">class<\/span> Main <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> main<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw4\">long<\/span> start <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">currentTimeMillis<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw4\">int<\/span> length <span class=\"sy0\">=<\/span> <span class=\"nu0\">10<\/span>_000_000<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; Point3D<span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> myArray <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> Point3D<span class=\"br0\">&#91;<\/span>length<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span> i <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span> i <span class=\"sy0\">&amp;<\/span>lt<span class=\"sy0\">;<\/span> myArray.<span class=\"me1\">length<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">++<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myArray<span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">new<\/span> Point3D<span class=\"br0\">&#40;<\/span>0f, 0f, 0f<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Print last value of array : &quot;<\/span><span class=\"sy0\">+<\/span>myArray<span class=\"br0\">&#91;<\/span>length<span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+runtime\"><span class=\"kw3\">Runtime<\/span><\/a>.<span class=\"me1\">getRuntime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">gc<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; printMemoryUsage<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Array length : &quot;<\/span><span class=\"sy0\">+<\/span>myArray.<span class=\"me1\">length<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Total time &quot;<\/span><span class=\"sy0\">+<\/span><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">currentTimeMillis<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-<\/span> start<span class=\"br0\">&#41;<\/span><span class=\"sy0\">+<\/span> <span class=\"st0\">&quot; ms&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">private<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> printMemoryUsage<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;MB: &quot;<\/span> <span class=\"sy0\">+<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">double<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+runtime\"><span class=\"kw3\">Runtime<\/span><\/a>.<span class=\"me1\">getRuntime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">totalMemory<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+runtime\"><span class=\"kw3\">Runtime<\/span><\/a>.<span class=\"me1\">getRuntime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">freeMemory<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">\/<\/span> <span class=\"br0\">&#40;<\/span><span class=\"nu0\">1024<\/span><span class=\"sy0\">*<\/span><span class=\"nu0\">1024<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">static<\/span> value <span class=\"kw1\">class<\/span> Point3D <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">private<\/span> <span class=\"kw4\">float<\/span> x <span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">private<\/span> &nbsp;<span class=\"kw4\">float<\/span> y <span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">private<\/span> &nbsp;<span class=\"kw4\">float<\/span> z <span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">public<\/span> Point3D<span class=\"br0\">&#40;<\/span><span class=\"kw4\">float<\/span> x, <span class=\"kw4\">float<\/span> y, <span class=\"kw4\">float<\/span> z<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">x<\/span> <span class=\"sy0\">=<\/span> x<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">y<\/span> <span class=\"sy0\">=<\/span> y<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">z<\/span> <span class=\"sy0\">=<\/span> z<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; @Override<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">public<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> toString<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"st0\">&quot;Point3D{&quot;<\/span> <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;x=&quot;<\/span> <span class=\"sy0\">+<\/span> x <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;, y=&quot;<\/span> <span class=\"sy0\">+<\/span> y <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;, z=&quot;<\/span> <span class=\"sy0\">+<\/span> z <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">'}'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n\n<\/pre>\r\n\r\n\r\n\r\n<p>Print last value of array : Point3D{x=0.0, y=0.0, z=0.0}<br \/><strong>MB: 269.80834197998047<br \/><\/strong>Array length : 10000000<br \/><strong>Total time 224 ms<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Oh dear \ud83d\ude41 actually ran slower using value class !<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>Currently (in this build for now) value class is restricted to 64bit for flattening.<\/p>\r\n\r\n\r\n\r\n<p>The point3d class has 3 floats = 32 * 3 = 96 bits<\/p>\r\n\r\n\r\n\r\n<p>In additional there is also an extra bit also added to keep track of whether the value is null or not.<\/p>\r\n\r\n\r\n\r\n<p>So it&#8217;s actually (32 * 3) +1 = 97 bits<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>Why 64bit restriction for flattening, apparently that is to align with size of registers which are 64 bits, otherwise if you need multiple registers, you are in danger of tearing &#8211; where threads might be able to read an inconsistent value.<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>However, in the EA build there is an option to create an array of value classes where you can accept tearning might occur and also specify the values cannot be null<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>Replace these lines<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\">\n\n<div class=\"codecolorer-container java default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"java codecolorer\"><span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span> i <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span> i <span class=\"sy0\">&amp;<\/span>lt<span class=\"sy0\">;<\/span> myArray.<span class=\"me1\">length<\/span><span class=\"sy0\">;<\/span> i<span class=\"sy0\">++<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; myArray<span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">new<\/span> Point3D<span class=\"br0\">&#40;<\/span>0f, 0f, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n\n<\/pre>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>with this instead (but note this using a jdk internal class ) so you will need to use this additional command line flags<br \/><br \/><strong>&#8211;add-exports java.base\/jdk.internal.value=ALL-UNNAMED &#8211;enable-preview<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\">\n\n<div class=\"codecolorer-container java default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"java codecolorer\">Point3D<span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> myArray <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span>Point3D<span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span> ValueClass.<span class=\"me1\">newNullRestrictedNonAtomicArray<\/span><span class=\"br0\">&#40;<\/span>Point3D.<span class=\"kw1\">class<\/span>, <span class=\"nu0\">10<\/span>_000_000, <span class=\"kw1\">new<\/span> Point3D<span class=\"br0\">&#40;<\/span>0f, 0f, 0f<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n\n<\/pre>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>Full Code (Enabling Null-Restriction and Non-Atomicity )<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\">\n\n<div class=\"codecolorer-container java default\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><div class=\"java codecolorer\"><span class=\"kw1\">import<\/span> <span class=\"co2\">jdk.internal.value.ValueClass<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw1\">class<\/span> Main <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> main<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw4\">long<\/span> start <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">currentTimeMillis<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw4\">int<\/span> length <span class=\"sy0\">=<\/span> <span class=\"nu0\">10<\/span>_000_000<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; Point3D<span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> myArray <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span>Point3D<span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span> ValueClass.<span class=\"me1\">newNullRestrictedNonAtomicArray<\/span><span class=\"br0\">&#40;<\/span>Point3D.<span class=\"kw1\">class<\/span>, <span class=\"nu0\">10<\/span>_000_000, <span class=\"kw1\">new<\/span> Point3D<span class=\"br0\">&#40;<\/span>0f, 0f, 0f<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Print last value of array : &quot;<\/span><span class=\"sy0\">+<\/span>myArray<span class=\"br0\">&#91;<\/span>length<span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+runtime\"><span class=\"kw3\">Runtime<\/span><\/a>.<span class=\"me1\">getRuntime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">gc<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; printMemoryUsage<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Array length : &quot;<\/span><span class=\"sy0\">+<\/span>myArray.<span class=\"me1\">length<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Total time &quot;<\/span><span class=\"sy0\">+<\/span><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">currentTimeMillis<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-<\/span> start<span class=\"br0\">&#41;<\/span><span class=\"sy0\">+<\/span> <span class=\"st0\">&quot; ms&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">private<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> printMemoryUsage<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">out<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;MB: &quot;<\/span> <span class=\"sy0\">+<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">double<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+runtime\"><span class=\"kw3\">Runtime<\/span><\/a>.<span class=\"me1\">getRuntime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">totalMemory<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+runtime\"><span class=\"kw3\">Runtime<\/span><\/a>.<span class=\"me1\">getRuntime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">freeMemory<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">\/<\/span> <span class=\"br0\">&#40;<\/span><span class=\"nu0\">1024<\/span><span class=\"sy0\">*<\/span><span class=\"nu0\">1024<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">static<\/span> value <span class=\"kw1\">class<\/span> Point3D <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">private<\/span> <span class=\"kw4\">float<\/span> x <span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">private<\/span> &nbsp;<span class=\"kw4\">float<\/span> y <span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">private<\/span> &nbsp;<span class=\"kw4\">float<\/span> z <span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">public<\/span> Point3D<span class=\"br0\">&#40;<\/span><span class=\"kw4\">float<\/span> x, <span class=\"kw4\">float<\/span> y, <span class=\"kw4\">float<\/span> z<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">x<\/span> <span class=\"sy0\">=<\/span> x<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">y<\/span> <span class=\"sy0\">=<\/span> y<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">z<\/span> <span class=\"sy0\">=<\/span> z<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; @Override<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">public<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> toString<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"st0\">&quot;Point3D{&quot;<\/span> <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;x=&quot;<\/span> <span class=\"sy0\">+<\/span> x <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;, y=&quot;<\/span> <span class=\"sy0\">+<\/span> y <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;, z=&quot;<\/span> <span class=\"sy0\">+<\/span> z <span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">'}'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n\n<\/pre>\r\n\r\n\r\n\r\n<p>With above the output is now<\/p>\r\n\r\n\r\n\r\n<p>Print last value of array : Point3D{x=0.0, y=0.0, z=0.0}<br \/><strong>MB: 40.89228820800781<br \/><\/strong>Array length : 10000000<br \/><strong>Total time 109 ms<\/strong><\/p>\r\n\r\n\r\n\r\n<p>\ud83d\ude42<\/p>\r\n\r\n\r\n\r\n<p>Wow!! <strong>From 270 mb <\/strong>we went down <strong>to 41 mb<\/strong> ! a huge reduction in memory usage!<\/p>\r\n\r\n\r\n\r\n<p>Also the execution time was reduced <strong>from 182ms to 109ms<\/strong><\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>Hopefully this will be promoted from preview to something that ships in Java soon. Can&#8217;t wait!<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; A new build of Valhalla has been made available on https:\/\/jdk.java.net\/valhalla\/ this version is built on top Java 26 early build. It&#8217;s been a while since I tried to the previous Valhalla Early access in 2022 A lot has has changed since then. In the previous version they had concept of value (without identity) &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/choudhury.com\/blog\/2025\/11\/22\/experimenting-with-valhalla-early-access-build-26-jep401ea21-1-2025-10-10\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Experimenting with Valhalla Early Access Build 26-jep401ea2+1-1 (2025\/10\/10)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3,25],"tags":[20],"class_list":["post-870","post","type-post","status-publish","format-standard","hentry","category-java","category-valhalla","tag-java"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/posts\/870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/comments?post=870"}],"version-history":[{"count":33,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/posts\/870\/revisions"}],"predecessor-version":[{"id":903,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/posts\/870\/revisions\/903"}],"wp:attachment":[{"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/media?parent=870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/categories?post=870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/choudhury.com\/blog\/wp-json\/wp\/v2\/tags?post=870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}