Thank you for the feedback, Marius!

Re: initialization - you are right, a simple check in the setters would avoid 
instantiation when setting to a default value:

setProp(T value) {
  if(value != DEFAULT) { // or equals()
    prop().set(value);
  }
}

we could instrument the code to see how prevalent this situation is, starting 
with these:


   Node.K_FOCUS_TRAVERSABLE: 1794
   Node.K_VISIBLE: 787

Since the initial experiment dealt with the Node class only, what other classes 
should we consider for this treatment (if/when we decide to proceed)?  I was 
thinking Region and Labeled, but perhaps there are others?

What do you think?

-andy


From: Marius Hanl <[email protected]>
Date: Thursday, February 12, 2026 at 09:52
To: Andy Goryachev <[email protected]>, [email protected] 
<[email protected]>
Subject: [External] : Re: Experiment: Node properties

I also like the idea. I, once had a similar idea but not enough time to do a 
deep check. In my opinion, we should make as much lazy as possible, as 
subclasses and developers often just use a small set of properties really.

What I also had a look back then is default values for properties, like 
focusTraversable. Right now, changing default values (via the setter) in the 
constructor will initialize the property, even if otherwise we never need it 
(like pickOnBounds, focusTraversable, ...). Back then, I thought about 
improving this by using a mechanism which is already there (but not implemented 
consistently and used everywhere), that is methods like 
Control.getInitialFocusTraversable(), which could work in a way without 
initializing this 100 of times (like in case of Cell).

So maybe, we can save a bit more by not initializing properties by 
(essentially) changing the default value of it (therefore the getter).
Calling the getter in most cases in JavaFX does not yet initialize the property 
itself.

The biggest benefits will probably be tables, as they have rows (cells) with 
cells, that can add up quite fast with many columns. Running more optimized on 
a RaspberryPi is also good thing.

-- Marius
Gesendet: Mittwoch, 4. Februar 2026 um 22:17
Von: "Andy Goryachev" <[email protected]>
An: OpenJFX <[email protected]>
Betreff: Experiment: Node properties
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.

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.

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!

Cheers,
-andy


References

[0] 
https://github.com/andy-goryachev-oracle/Test/blob/main/doc/Experiments/NodeProperties.md<https://urldefense.com/v3/__https://github.com/andy-goryachev-oracle/Test/blob/main/doc/Experiments/NodeProperties.md__;!!ACWV5N9M2RV99hQ!LCveTp4pcWBNp6tpAKig3Au9Hz4NhTr7bE2lrn4TFaTJYk_2lOErZgtsHntt0LXvocbsAKb4FHmFH9kex6EJE5NO$>

Reply via email to