Where in Memory are Static Members Stored in Java?
Static methods and variables, such as those demonstrated in the provided Java code snippet, are stored in the PermGen section of the heap memory in Oracle's Hotspot JVM and others based on it. PermGen holds meta-data, including class-related data.
Storing Mechanisms:
-
Static variables: Only their technical values (primitives or references) are stored in PermGen. If a static variable references an object, the object itself resides in standard heap areas, not PermGen.
-
Static methods: All methods, including static ones, occupy space in PermGen as part of reflection data.
Important Notes:
- PermGen is only used for metadata; static fields are stored in the regular heap.
- Eclipse OpenJ9 and other JVMs may not have PermGen or Metaspace.
- Relying on finalize() for garbage collection is unreliable. It's up to the JVM to determine garbage collection timing and eligible objects.
- Setting a static variable to null alone may not guarantee object removal from the heap.
- How code and data are stored can vary depending on the JVM implementation and version.
The above is the detailed content of Where Are Java Static Members Stored in Memory?. For more information, please follow other related articles on the PHP Chinese website!