看thinking in java 中有这样一段话:
Static storage. “Static” is used here in the sense of “in a fixed location” (although it’s also in RAM). Static storage contains data
that is available for the entire time a program is running. You can use the static keyword to specify that a particular element of an
object is static, but Java objects themselves are never placed in static storage.想问一下,如果一个类有几个静态变量,如static int i = 0;
static HashMap map = new HashMap();
...这里,类在实例化后,i是被放到静态存储区了。可是这个map呢?看起来好像应该也放到静态存储区,可是又说JAVA对象从不放到静态存储区。难道是对这个map的引用被放到静态存储区了?另外,静态存储区具体会有多大?是不是在应用服务器或者JVM中可以设置大小?还是JVM自动分配的?谢谢!

解决方案 »

  1.   

    楼上的,对象放到静态存储区了?Java objects themselves are never placed in static storage这句话怎么理解?
      

  2.   

    java 对像本身从来不会存放在静态存储空间的。
      

  3.   

    答:i和map(它只是一个变量,大约4个字节,存放一个对象的地址-即引用而已,不是对象)都放在静态存储区,map所引用的"那个对象"(空间可能很大),这个对象永远是在堆中分配的.其实:静态存储区本身也是堆中的一个部分.是堆中“in a fixed location”(相对固定位置的地方)而已.
      

  4.   


    嗯,对于primitive类型的变量,直接把值放到静态存储区了,而对于对象引用,只是把引用放到静态区,说白了就是指针放到静态区了,而指针指的还是HEAP中的对象
      

  5.   

    i和map的引用放在静态存储区,map指向的对象放在堆了。对象是不会被存储在静态区的