static 变量是在编译前分配,类装载时java中所有对象都是在堆上创建的,运行时的内存分配都在堆上进行。堆是在java虚拟机启动时分配的。ps:堆(heap)

解决方案 »

  1.   

    当你new一个对象时,就会在堆中为其分配一个内存
      

  2.   

    那么 static 方法呢,  其内存分配如何另外
    我地程序里写多下面这些语句时,有时候 会出现stack over flow错误
    "在类field中 调用其他类地非static方法",如:private final long SLEEPTIME = INMSContext.getInstance().getnCheckServiceAlivePeriod();谢谢
      

  3.   

    static 方法跟static 变量一样  类装载时分配private final long 是在其相应的内存占(stack)中创建的这里stack over flow可能是由于你调用其他方法造成的
      

  4.   

    对于Hashmap,它里面都一个个的Entry对象,有四个属性
    final Object key;
    Object value;
    final int hash;
    Entry next;
    Hashmap初始化的时候,容量是16个Entry,当put的Entry到达上限的3/4的时候,自动扩容到原来的两倍
    就是元素超过9个的时候,Hashmap得容量就到了32。
      

  5.   

    类装载不是发生在解释执行的时候吗?
    另外,方法在被调用时也重新分配空间(存放copy的方法体)吗?还是什么别的?
      

  6.   

    类的装载看下面:
    /* TestS.java
     * Created on 2004/12/08
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */public class TestS {
    TestUnit c = new TestUnit("TestUnit1"); static {
    TestUnit a = new TestUnit("TestUnit2");
    } static TestUnit b = new TestUnit("TestUnit3"); TestS() {
    TestUnit d = new TestUnit("TestUnit4");
    d = c;
    } public static void main(String[] args) {
    TestUnit e = new TestUnit("TestUnit5");
    TestS t = new TestS(); }
    }class TestUnit {
    private String name; public TestUnit(String name) {
    System.out.println("init: " + name);
    }
    }
    ------------------------------
    输出
    init: TestUnit2
    init: TestUnit3
    init: TestUnit5
    init: TestUnit1
    init: TestUnit4
      

  7.   

    一个class在被load的时候,初始化该class的静态成员变量,然后是静态代码段。
    当class被实例化的时候,初始化非静态的成员变量,然后是构造函数。大概是这个意思,不是很详细。
      

  8.   

    看看Thinking in java第三版的 Collections of Objects一章就知道了。
      

  9.   

    对于Hashmap,它里面都一个个的Entry对象,有四个属性
    final Object key;
    Object value;
    final int hash;
    Entry next;
    Hashmap初始化的时候,容量是16个Entry,当put的Entry到达上限的3/4的时候,自动扩容到原来的两倍
    就是元素超过9个的时候,Hashmap得容量就到了32。
    -----------------------------------------------------------------------------------------
    final int hash;--> hashCode默认上限是0.75,也就是load factor参数,这个参数是可以设置的。
    load factor越大,消耗的空间越小,但是从hashMap里检索数据的速度会变慢
    反之亦然
    所以要在空间和时间上做权衡
      

  10.   

    回复人: XiuSemen() ( ) 信誉:100  2004-12-08 11:38:00  得分: 0  
     
     
       看您上面的结果,应该是先静态代码段吧,再是类变量
    -------------------------------------------------------  
     
    哦,谢谢提醒,静态代码段和静态成员变量,谁在前面,谁就先执行
      

  11.   

    http://community.csdn.net/Expert/topic/3583/3583482.xml?temp=.1379511