Young space包括eden space和survivor spaces。
静态和静态final原始类型和引用存储在JVM中的什么位置,以便能够使用单个实例?
没有定义, 但是在Sun/Oracle JVM中,静态字段存储在类字段的特殊对象中。每个类加载器都有一个实例,因此静态字段可以有多个实例。
静态和静态final对象是否存储在Heap(我假设它们被转移到tenured)中?
在Sun/Oracle Java 7中是这样。它们可能在Perm Gen或其他任何地方。
在应用程序中,静态final引用的数量被认为是最佳实践?
将它们保持到最小。
创建更多的静态final引用会减少JVM中的Heap空间吗?
如果您可以将final字段更改为static final字段,则可以节省一些空间(如果存在多个实例)。然而,清晰度通常比性能更重要。(我会因为清晰度而这样做)
顺带提一下:我已经在Java中开发了13年。
那么静态字段可以有多个实例 - JVM是否会更改每个实例?
它们是独立的。每个类加载器可以加载其自己的类版本(代码不必相同),并且每个类都有自己的静态字段(它们也不必相同)。
如果更改了静态字段(例如,执行了static int instanceCount其中每个对象构造上都会执行instanceCount ++)?
不会。
还有,对象是否可以移动到Perm Gen中?
不。某些未在一个位置定义的数据可以根据实现和版本放置在任何地方。
Perm Gen是否被认为是Heap的一部分?
它是老年代的一部分= tenured + perm gen。
Young gen = eden + survivor space * 2
最大堆大小限制young gen & tenured总数。Perm gen和直接内存有它们自己的限制。内存映射文件不遵循这些限制。
这对于默认的并行收集器和并发标记扫描是正确的。
G1收集器不以相同的方式划分空间。
获取更多详细信息的链接
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
Java heap terminology: young, old and permanent generations?
http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html