生成字节码的时候JVM还没启动呢,编译只是编译器把java文件按固定语法编译成字节码保存到硬盘中而已。关于加载类的问题请看下面:JVM的内存空间大体可分为三层,分别是新生代、老生代和持久层,其中持久层是存放类文件对象的,当你调用到类中的成员时(不管是调用静态成员还是调用构造函数),类加载器就会把类文件(就是字节码文件)从硬盘中加载到JVM内存的持久层成为类文件对象,静态成员就随着类加载进来了(注意:这时候还没在新生代中产生实例对象),比如调用静态方法的时候不需要new对象,但要加载类文件,在加载类文件到持久层时类中的所有静态成员都会加载进内存,,其次,new对象也是先做这一部,要等类和静态成员都先进来,再用类文件对象这个”模板“搞个对象出来,如果之前已经new过该类的对象,那么类文件对象就已经并且一直存在持久层中 |