DEV Community

Discussion on: Ways to create Singletons and the tradeoffs between them

Collapse
abh1navv profile image
Abhinav Pandey Author

Each enum instance takes as much memory as a normal object - methods do not matter...enum-values as static members is where the memory resides. Check this article for a comparison -
stackoverflow.com/questions/143285...

As for double checking - Can you get me the date on this article?

Collapse
cicirello profile image
Vincent A. Cicirello • Edited on

That article on double checked locking is extremely out-dated. It was written pre-Java 4. See the phrase "expected ... in 1.4." However, enough was known at the time of the then-upcoming JDK 5 that the authors also explain near the end the very simple way of getting double checked locking to work beginning with JDK 5. You need to declare the field as volatile.

So to fix your double checked locking example just declare instance as volatile.

Thread Thread
abh1navv profile image
Abhinav Pandey Author

thanks!

Collapse
ujaehrig profile image
Ulf Jährig

Methods will still take space in the permanent section of the heap, as classes are still loaded. But this is a one-time cost. But what should be the difference between a single static enum member and a static member in a normal class? IMHO it doesn't matter if the static member is part of an enum or part of a "normal" class. The only advantage of an non-enum is the possibility of lazy initialisation. So my suggestion would probably be more on the line of lazy initialisation required and not on memory consumption.

As Vincent already said, the article above is quite old (and volatile will help), but AFAIK the memory model didn't change and the overall problem is still valid today.