<!DOCTYPE html>
<!-- BaNnErBlUrFlE-BoDy-start -->
<!-- Preheader Text : BEGIN -->
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;max-height:0px;opacity:0;overflow:hidden;">
Hi Andy, I'm currently not having a lot of spare time to do active FX (application) development, so unfortunately I probably won't get around to playing with this any time soon (I usually do most of my FX work when unemployed or when I'm on</div>
<!-- Preheader Text : END -->
<!-- Email Banner : BEGIN -->
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;max-height:0px;opacity:0;overflow:hidden;">ZjQcmQRYFpfptBannerStart</div>
<!--[if ((ie)|(mso))]>
<table border="0" cellspacing="0" cellpadding="0" width="100%" style="padding: 0px 0px 10px 0px; direction: ltr" lang="en"><tr><td>
<table border="0" cellspacing="0" cellpadding="0" style="padding: 0px 8px 6px 8px; width: 100%; border-radius:4px; border-top:4px solid #8193a0;background-color:#60beeb;"><tr><td valign="top">
<table align="left" border="0" cellspacing="0" cellpadding="0" style="padding: 0px 8px 4px 8px; font-size: 12px; line-height: 16px">
<tr><td style="color:#000000; font-family: 'Arial', sans-serif; font-weight:bold; font-size:14px; line-height: 20px; direction: ltr">
This Message Is From an External Sender
</td></tr>
<tr><td style="color:#000000; font-weight:normal; font-family: 'Arial', sans-serif; font-size:12px; direction: ltr">
This message came from outside your organization.
</td></tr>
</table>
<![if ie]><br clear="all"><![endif]>
<table align="right" border="0" cellspacing="0" cellpadding="0" style="padding: 0px 0px 4px 0px; font-size: 14px; line-height: 36px"><tr>
<td style="direction: ltr"> <a target="_blank" href="https://us-phishalarm-ewt.proofpoint.com/EWT/v1/ACWV5N9M2RV99hQ!NB26HKPE-kJvFVPgl9P0eC1aEgTncirt4a5AdrE1aLWxbTMDzI63iPm7kB6ihcotcHzXeCRUxgp2GKuYueeFuyeSfygnZO1GjE4Tg80$" style="mso-padding-alt: 7px; padding: 7px; border-radius: 2px; border: 1px solid #666666; "><strong style="font-weight: normal; color: #000000; text-decoration: none; font-family: 'Arial', sans-serif; font-size: 14px;"> Report Suspicious </strong></a> </td>
</tr></table>
</td></tr></table>
</td></tr></table>
<![endif]-->
<![if !((ie)|(mso))]>
<div dir="ltr" lang="en" id="pfptBannerl9xt6hc" style="all: revert !important; display:block !important; text-align: left !important; margin: 0 0 10px 0 !important; padding:7px 16px 8px 16px !important; border-radius: 4px !important; min-width: 200px !important; background-color: #60beeb !important; background-color: #60beeb; border-top: 4px solid #8193a0 !important; border-top: 4px solid #8193a0;">
<div id="pfptBannerl9xt6hc" style="all: unset !important; float:left !important; display:block !important; margin: 1px 0 1px 0 !important; max-width: 600px !important;">
<div id="pfptBannerl9xt6hc" style="all: unset !important; display:block !important; visibility: visible !important; background-color: #60beeb !important; color:#000000 !important; color:#000000; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-weight:bold !important; font-weight:bold; font-size:14px !important; line-height:1.29 !important; line-height:1.29">
This Message Is From an External Sender
</div>
<div id="pfptBannerl9xt6hc" style="all: unset !important; display:block !important; visibility: visible !important; background-color: #60beeb !important; color:#000000 !important; color:#000000; font-weight:normal; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-size:12px !important; line-height:1.5 !important; line-height:1.5; margin-top:2px !important;">
This message came from outside your organization.
</div>
</div>
<div id="pfptBannerl9xt6hc" style="all: unset !important; float: right !important; display: block !important; display: block; margin-left: 16px !important; margin-top: 1px !important; text-align: right !important; width: fit-content !important; font-size: 12px !important">
<a id="pfptBannerl9xt6hc" href="https://us-phishalarm-ewt.proofpoint.com/EWT/v1/ACWV5N9M2RV99hQ!NB26HKPE-kJvFVPgl9P0eC1aEgTncirt4a5AdrE1aLWxbTMDzI63iPm7kB6ihcotcHzXeCRUxgp2GKuYueeFuyeSfygnZO1GjE4Tg80$"
style="all: unset !important; display: inline-block !important; text-decoration: none">
<div class="pfptPrimaryButtonl9xt6hc" style="display: inline-block !important; display: inline-block; visibility: visible !important; opacity: 1 !important; color: #000000 !important; color: #000000; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-size: 14px !important; font-weight: normal !important; text-decoration: none !important; border-radius: 2px !important; margin-top: 3px !important; margin-bottom: 3px !important; margin-left: 16px !important; padding: 7.5px 16px !important; white-space: nowrap !important; width: fit-content !important;
border: 1px solid #666666">
Report Suspicious
</div>
</a>
</div>
<div style="clear: both !important; display: block !important; visibility: hidden !important; line-height: 0 !important; font-size: 0.01px !important; height: 0px"> </div>
</div>
<![endif]>
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;max-height:0px;opacity:0;overflow:hidden;">ZjQcmQRYFpfptBannerEnd</div>
<!-- Email Banner : END -->
<!-- BaNnErBlUrFlE-BoDy-end -->
<html>
<head><!-- BaNnErBlUrFlE-HeAdEr-start -->
<style>
#pfptBannerl9xt6hc { all: revert !important; display: block !important;
visibility: visible !important; opacity: 1 !important;
background-color: #60beeb !important;
max-width: none !important; max-height: none !important }
.pfptPrimaryButtonl9xt6hc:hover, .pfptPrimaryButtonl9xt6hc:focus {
background-color: #77a8c4 !important; }
.pfptPrimaryButtonl9xt6hc:active {
background-color: #8193a0 !important; }
html:root, html:root>body { all: revert !important; display: block !important;
visibility: visible !important; opacity: 1 !important; }
</style>
<!-- BaNnErBlUrFlE-HeAdEr-end -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hi Andy,</p>
<p>I'm currently not having a lot of spare time to do active FX
(application) development, so unfortunately I probably won't get
around to playing with this any time soon (I usually do most of my
FX work when unemployed or when I'm on holidays :)). However, I'll
follow the results with interest. The topic of fast data
structures and more efficient use of cpu/memory is always
fascinating. <br>
</p>
<p>Anyway, thanks for hearing me out, perhaps it was useful.</p>
<p>--John</p>
<div class="moz-cite-prefix">On 24/02/2026 18:03, Andy Goryachev
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CY8PR10MB726510CBC08007310C3C2FB6E574A@CY8PR10MB7265.namprd10.prod.outlook.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<div
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
All good points. The reason I asked the community for the
feedback is to get more data with real applications. </div>
<div
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Would you like to try it with <i>your </i>application? Would
you share the results?</div>
<div
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks</div>
<div
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
-andy </div>
<div
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="mail-editor-reference-message-container">
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr;">
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="text-align: left; padding: 3pt 0in 0in; border-width: 1pt medium medium; border-style: solid none none; border-color: rgb(181, 196, 223) currentcolor currentcolor; font-family: Aptos; font-size: 12pt; color: black;">
<b>From: </b>John Hendrikx <a class="moz-txt-link-rfc2396E" href="mailto:john.hendrikx@gmail.com"><john.hendrikx@gmail.com></a><br>
<b>Date: </b>Monday, February 23, 2026 at 23:05<br>
<b>To: </b>Andy Goryachev <a class="moz-txt-link-rfc2396E" href="mailto:andy.goryachev@oracle.com"><andy.goryachev@oracle.com></a>,
<a class="moz-txt-link-abbreviated" href="mailto:openjfx-dev@openjdk.org">openjfx-dev@openjdk.org</a> <a class="moz-txt-link-rfc2396E" href="mailto:openjfx-dev@openjdk.org"><openjfx-dev@openjdk.org></a><br>
<b>Subject: </b>[External] : Re: Experiment: Node properties<br>
<br>
</div>
<div dir="ltr" id="pfptBannerp7mohbo"
style="visibility: visible !important; opacity: 1 !important; max-width: none !important; max-height: none !important; display: block !important; text-align: left !important; margin: 0px 0px 10px !important; padding: 7px 16px 8px !important; border-radius: 4px !important; min-width: 200px !important; background-color: rgb(96, 190, 235); border-top-width: 4px !important; border-top-style: solid !important; border-top-color: rgb(129, 147, 160) !important;"
lang="en">
<div id="pfptBannerp7mohbo"
style="visibility: visible !important; opacity: 1 !important; background-color: rgb(96, 190, 235); max-height: none !important; float: left !important; display: block !important; margin: 1px 0px !important; max-width: 600px !important;">
<div id="pfptBannerp7mohbo"
style="opacity: 1 !important; max-width: none !important; max-height: none !important; display: block !important; visibility: visible !important; background-color: rgb(96, 190, 235); color: rgb(0, 0, 0); font-family: Arial, sans-serif !important; font-weight: bold !important; font-size: 14px !important; line-height: 1.29 !important;">
This Message Is From an External Sender</div>
<div id="pfptBannerp7mohbo"
style="font-weight: normal; opacity: 1 !important; max-width: none !important; max-height: none !important; display: block !important; visibility: visible !important; background-color: rgb(96, 190, 235); color: rgb(0, 0, 0); font-family: Arial, sans-serif !important; font-size: 12px !important; line-height: 1.5 !important; margin-top: 2px !important;">
This message came from outside your organization.</div>
</div>
<div id="pfptBannerp7mohbo"
style="visibility: visible !important; opacity: 1 !important; background-color: rgb(96, 190, 235); max-width: none !important; max-height: none !important; float: right !important; display: block !important; margin-left: 16px !important; margin-top: 1px !important; text-align: right !important; width: fit-content !important; font-size: 12px !important;">
<div class="pfptPrimaryButtonp7mohbo"
style="white-space: nowrap; margin-top: 3px; margin-bottom: 3px; margin-left: 16px; padding: 7.5px 16px; border-width: 1px; border-style: solid; border-color: rgb(102, 102, 102); border-radius: 2px; width: fit-content; display: inline-block; font-family: Arial, sans-serif; font-size: 14px; color: rgb(0, 0, 0);">
<span style="background-color: rgb(96, 190, 235);"><a
href="https://us-phishalarm-ewt.proofpoint.com/EWT/v1/ACWV5N9M2RV99hQ!NB2w9kOkmgLOPxPqHXmUmLdxC9ZtwG8cWgWC3QrerJBijvilB58UVSfh4k_zegB5C4cYQuZsUgja4MdmMuDGNKl1z77lAqJtu1aEvg$"
id="pfptBannerp7mohbo"
data-outlook-id="222e8053-beec-4ad8-a245-a1f233001953"
style="text-decoration: none; display: inline-block; background-color: rgb(96, 190, 235); max-width: none; max-height: none;"
moz-do-not-send="true">Report Suspicious</a></span></div>
</div>
<div
style="line-height: 0; height: 0px; display: block; font-size: 0.01px;"> </div>
</div>
<p class="ms-outlook-mobile-reference-message skipProofing">Thanks
for the taking the time to respond.</p>
<div class="moz-cite-prefix">On 24/02/2026 00:32, Andy Goryachev
wrote:</div>
<blockquote>
<p class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; margin-top: 0px; margin-bottom: 0px;">
<span
style="font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">>
What trade off are you making here? It seems we're
trading a small memory gain for more CPU use (extra
indirection, walking a list linearly to find the correct
property on each use/access VS no indirection, no list
walking).</span></p>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
You are right. The tradeoff is non-zero memory gain (a few
megabytes, to the tune of maybe 5% of total heap size) at
the cost of extra CPU cycles. The rationale is that even
though we consume extra CPU, it's much less noticeable
because of the cache-friendly implementation and non-zero
positive impact on garbage collector (less memory to scan).</div>
</blockquote>
<p class="ms-outlook-mobile-reference-message skipProofing">What
is more cache friendly about adding several extra indirections
to get to a property's value? Let me see:</p>
<p class="ms-outlook-mobile-reference-message skipProofing">Before:</p>
<p class="ms-outlook-mobile-reference-message skipProofing">-
isFocusTraversable(): get property -> get value</p>
<p class="ms-outlook-mobile-reference-message skipProofing">After:</p>
<p class="ms-outlook-mobile-reference-message skipProofing">-
isFocusTraversable(): get fast map -> get key ArrayList
-> get internal array -> get value ArrayList -> get
internal array -> get property -> get value</p>
<p class="ms-outlook-mobile-reference-message skipProofing">For
the garbage collector, the properties are likely going to be
in an area of the GC collector that will be scanned rarely,
and not part of the frequent scans for young objects. I don't
think we can generally conclude that having less memory used
will have an overall positive impact on the GC here. The
properties will be seen as long-lived by the GC, and will
reside in an area only scanned rarely, which has very little
impact on the performance of most GC implementations. </p>
<blockquote>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<p class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; margin-top: 0px; margin-bottom: 0px;">
<span
style="font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">>
Are the resource constrained platforms you named generally
memory or CPU constrained?</span></p>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I asked Gluon for some feedback on iOS/Android. However, my
previous experience with a large trading application says
that memory footprint savings outweighs the CPU cycles, so I
would imagine we'll get a net gain even on the desktop.</div>
</blockquote>
<p class="ms-outlook-mobile-reference-message skipProofing">That's
anecdotal, and will depend on the type of application,
platform, CPU cores available, etc. So while you may be
correct for your trading application, it may be completely the
opposite for a task tracking application. In general, memory
use is hardly a factor for most applications; most Java apps
don't even bother to limit the heap, yet complain about
several GB's of memory use when they have a retained size of
less than half a GB. Not that I'm not in favor of reducing
memory footprint, but I seriously wonder if there is much to
gain at the property level.</p>
<p class="ms-outlook-mobile-reference-message skipProofing"><br>
</p>
<blockquote>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<p class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; margin-top: 0px; margin-bottom: 0px;">
<span
style="font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">>
Have you investigated a breakdown of JavaFX memory use,
and did the amount of memory used by properties come out
on top here?</span></p>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
There is some statistics provided in <a
href="https://urldefense.com/v3/__https://github.com/andy-goryachev-oracle/Test/blob/main/doc/Experiments/NodeProperties.md__;!!ACWV5N9M2RV99hQ!MzSYmvZYuuGt1DeacdS8b3HxocmwPlbLyCsxYspFUtMNu6eQUQ64a2MmPb3qqChHl3CoNGgI7G63dlDvqa-KA2UQW14B$"
class="moz-txt-link-freetext"
data-outlook-id="9074576b-7c43-438e-a9d5-ea05048e66cd"
moz-do-not-send="true">
https://github.com/andy-goryachev-oracle/Test/blob/main/doc/Experiments/NodeProperties.md</a> ,
please take a look.</div>
</blockquote>
<div class="ms-outlook-mobile-reference-message skipProofing">I
took a look, but could only find statistics about properties.
I didn't see a breakdown of general JavaFX memory use (the
other 95%) to see if properties are the lowest hanging fruit.</div>
<blockquote>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<p class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; margin-top: 0px; margin-bottom: 0px;">
<span
style="font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">>
Would the gains you made here become irrelevant or less
relevant with Compact Object Headers [<a
href="https://openjdk.org/jeps/519"
class="moz-txt-link-freetext"
data-outlook-id="6cb8835d-b6f1-4268-bdc5-acb387ef1fbb"
style="margin-top: 0px; margin-bottom: 0px;"
moz-do-not-send="true">https://openjdk.org/jeps/519</a>]</span></p>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Compact Object Headers are almost irrelevant here - the
stats that were collected count the number of pointers saved
(assumed 8 bytes per pointer on 64 bit). The stats ignore
any other possible savings.</div>
</blockquote>
<p class="ms-outlook-mobile-reference-message skipProofing">Compact
Object Headers is especially relevant here as you're
optimizing small objects (properties) on which JEP519 offers
the most relative gain. Enabling it may reduce the 5% memory
gain you measured to a smaller margin, which impacts the
rationale for this change.</p>
<p class="ms-outlook-mobile-reference-message skipProofing">Furthermore,
if we're talking about saving memory, I think we can assume
we're using small heaps (less than 32 GB). In that case,
Hotspot will use 4 bytes per pointer (compressed OOPs) not 8,
so your assumption of 8 bytes per pointer will be incorrect in
the vast majority of JavaFX cases.</p>
<blockquote>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<p class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; margin-top: 0px; margin-bottom: 0px;">
<span
style="font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">>
I think the property look-up system cannot reasonably be
List (FastMap despite its name is a List). Converting this
to a map however is likely to require a small object (like
Map.Entry) which will further reduce any gains you made
here I think.</span></p>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
The FastMap is a map-like (key-value) storage, even though
it's implemented as an array. There is a debate as to what
would the most efficient implementation entail (a hashmap,
one array, or two arrays like the POC currently uses). The
idea is not to put
<b>all</b> the properties into the container, but only the
rarely used ones, with the end result of having a few (less
than 4-6, say). This makes the object small and
cache-friendly, which further speeds up the access.</div>
</blockquote>
<p class="ms-outlook-mobile-reference-message skipProofing">I'm
aware of the intentions to only put the rarely used properties
there. What is rarely used will depend on the application.
How many properties will end up being stored there also
depends on the application. What if the app does need several
of these properties and this structure grows to contain 20-30
properties?</p>
<p class="ms-outlook-mobile-reference-message skipProofing">Currently
your proposal wants to store these rarely used properties in
an O(n) structure, whereas a hash based solutions are O(1),
and where doing nothing is even faster as there is no map at
all.</p>
<p class="ms-outlook-mobile-reference-message skipProofing">So
although your map implementation may be small and cache
friendly (that last point being debatable, see indirection
count), it degrades badly when there are more than the
predicted amount of properties, and requires many more
indirections than the base case of doing nothing.</p>
<p class="ms-outlook-mobile-reference-message skipProofing">There
is talk about not having to do an expensive `hashCode` call in
your proposal. First, `hashCode` is really cheap for objects
not implementing equality as it falls back on the
Object#hashCode. I believe this is the case for properties.
Even if it isn't the case, you could use the identity hash
code here (the `==` equivalent in the hashing world).</p>
<p class="ms-outlook-mobile-reference-message skipProofing">However
that "expensive" call is what enables the O(1) lookup of the
value you are interested in, which can be truly cache friendly
with the right structure (array based open addressed map).</p>
<p class="ms-outlook-mobile-reference-message skipProofing">--John</p>
<blockquote>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks!</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
-andy</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="mail-editor-reference-message-container">
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="text-align: left; padding: 3pt 0in 0in; border-width: 1pt medium medium; border-style: solid none none; border-color: rgb(181, 196, 223) currentcolor currentcolor; font-family: Aptos; font-size: 12pt; color: black;">
<b>From: </b>openjfx-dev <a
href="mailto:openjfx-dev-retn@openjdk.org"
class="moz-txt-link-rfc2396E"
data-outlook-id="c4ceda82-4a4d-4013-8602-07c56454c4e2"
moz-do-not-send="true">
<openjfx-dev-retn@openjdk.org></a> on behalf of
John Hendrikx <a href="mailto:john.hendrikx@gmail.com"
class="moz-txt-link-rfc2396E"
data-outlook-id="6a581e80-a6c6-4c6c-a7ad-a77eb79bce65"
moz-do-not-send="true">
<john.hendrikx@gmail.com></a><br>
<b>Date: </b>Thursday, February 19, 2026 at 15:28<br>
<b>To: </b><a href="mailto:openjfx-dev@openjdk.org"
class="moz-txt-link-abbreviated moz-txt-link-freetext"
data-outlook-id="db1b9f81-80b3-407b-a571-6db4fc419e52"
moz-do-not-send="true">openjfx-dev@openjdk.org</a>
<a href="mailto:openjfx-dev@openjdk.org"
class="moz-txt-link-rfc2396E"
data-outlook-id="65818e93-6c49-4557-8050-7bcf378047bf"
moz-do-not-send="true">
<openjfx-dev@openjdk.org></a><br>
<b>Subject: </b>Re: Experiment: Node properties<br>
<br>
</div>
<p class="ms-outlook-mobile-reference-message skipProofing"><br>
</p>
<div class="moz-cite-prefix">On 04/02/2026 22:17, Andy
Goryachev wrote:</div>
<blockquote>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I would like to share the results of a little experiment
involving optimization of storage of Node properties.
The basic idea is to create a compact fast map-like
container to hold the rarely instantiated properties in
order to reduce the application memory footprint.</div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
The savings are not overwhelming, but not exactly zero.
I would imagine this optimization might be more
interesting in any resource constrained environment such
as Android / iOS / RaspberryPi. Please refer to [0] for
the details.</div>
</blockquote>
<p class="ms-outlook-mobile-reference-message skipProofing">What
trade off are you making here? It seems we're trading a
small memory gain for more CPU use (extra indirection,
walking a list linearly to find the correct property on
each use/access VS no indirection, no list walking).</p>
<p class="ms-outlook-mobile-reference-message skipProofing">Are
the resource constrained platforms you named generally
memory or CPU constrained?</p>
<p class="ms-outlook-mobile-reference-message skipProofing">Have
you investigated a breakdown of JavaFX memory use, and did
the amount of memory used by properties come out on top
here?</p>
<p class="ms-outlook-mobile-reference-message skipProofing">Would
the gains you made here become irrelevant or less relevant
with Compact Object Headers [<a
href="https://openjdk.org/jeps/519"
class="moz-txt-link-freetext"
data-outlook-id="6cb8835d-b6f1-4268-bdc5-acb387ef1fbb"
style="margin-top: 0px; margin-bottom: 0px;"
moz-do-not-send="true">https://openjdk.org/jeps/519</a>]</p>
<p class="ms-outlook-mobile-reference-message skipProofing"><br>
</p>
<blockquote>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I encourage you to try it with your application, to see
whether you notice any change in memory consumption
and/or performance. Let me know what you think!</div>
</blockquote>
<p class="ms-outlook-mobile-reference-message skipProofing">I
like the idea, but I wonder if there really is much to
gain here, and whether those gains will hold up with
future Java improvements.</p>
<p class="ms-outlook-mobile-reference-message skipProofing">I
think the property look-up system cannot reasonably be
List (FastMap despite its name is a List). Converting this
to a map however is likely to require a small object (like
Map.Entry) which will further reduce any gains you made
here I think.</p>
<p class="ms-outlook-mobile-reference-message skipProofing">--John</p>
<blockquote>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Cheers,</div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
-andy</div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<b>References</b></div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
[0] <a
href="https://urldefense.com/v3/__https://github.com/andy-goryachev-oracle/Test/blob/main/doc/Experiments/NodeProperties.md__;!!ACWV5N9M2RV99hQ!MzSYmvZYuuGt1DeacdS8b3HxocmwPlbLyCsxYspFUtMNu6eQUQ64a2MmPb3qqChHl3CoNGgI7G63dlDvqa-KA2UQW14B$"
class="moz-txt-link-freetext"
data-outlook-id="217ca979-74ae-4107-9a0b-bf3cf23cb5ec"
moz-do-not-send="true">
https://github.com/andy-goryachev-oracle/Test/blob/main/doc/Experiments/NodeProperties.md</a></div>
<div
class="ms-outlook-mobile-reference-message skipProofing"
style="direction: ltr; font-family: "Iosevka Fixed SS16", Arial, Helvetica, sans-serif; font-size: 12pt;">
<br>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</body>
</html>