Hey Nathan,

I like the idea in general and but you have to be careful with changing this as I assume this was done to save memory by creating the list, only when at least one element would be added to the list. I guess if we always initialize the list, we'd have to do something like the following in the end `this.activeFactoryNames = activeFactoryNames.isEmpty() ? Collections.emptyList() : activeFactoryNames` which is probably not that bad, assuming we probably already do something similar.

I don't think anyone would object to such an improvement regarding NPE safety as long as the final memory consumption stays the same. It would be a pity though if we unnecessarily created lots of empty ArrayLists.

Am 18.08.2020 um 22:18 schrieb Nathan Xu:
This is my first message posted here after I finally succeeded in subscribing to Hibernate dev mail list.

As well known, we utilized the following 'lazy initialization' pattern extensively in our codebase to save memory:

if ( activeFactoryNames == null ) {
     activeFactoryNames = new ArrayList<>();
}
However, even since JDK7, ArrayList has gone through refactoring to keep from allocating memory for 10 elements in advance, if the instance was created by default constructor and the allocation of memory is only done when some element is really added in future. Namely, ArrayList has the lazy initialization feature built-in. E.g., see https://stackoverflow.com/questions/33688753/jdk-api-documentation-is-incorrect-for-arraylist-constructor-is-that-a-bug
for details. You can also browse the source code of ArrayList to confirm.
Screen Shot 2020-08-18 at 4.06.58 PM.png
Needless to say, the lazy initialization pattern has serious NPE issue if it is not coded carefully (which is tedious and error-prone per se). As an active Hibernate v6 contributor, I am troubled by such NPE issue again and again. Is it a good timing to get rid of the above lazy initialization pattern for now? Hopefully my message is good food for thought. No finger pointing. Just curious.

_______________________________________________
hibernate-dev mailing list -- hibernate-dev@lists.jboss.org
To unsubscribe send an email to hibernate-dev-le...@lists.jboss.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
_______________________________________________
hibernate-dev mailing list -- hibernate-dev@lists.jboss.org
To unsubscribe send an email to hibernate-dev-le...@lists.jboss.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to