楼主您好,下面说一下我的理解:
当运行某字节码文件时,操作系统就启动一个java进程,开启java虚拟机,并为该进程分配内存空间。被分配的内存空间大致可以分为这么几类:堆、栈、方法区,本地方法区,寄存器区等。之后该字节码文件被加载进了这片被分配内存的方法区中。您看,整个字节码文件都被加载进了方法区,字节码文件中的静态方法当然也在方法区了。我认为可以这么说,类中的方法都在类加载的时候存储在了方法区中。这是对楼主第一个问题的解答。
第二个问题,当运行某类中静态方法时,在该静态方法中定义了变量,该变量属于局部变量,所以该变量存储在了栈内存中。另外,给出各类内存的作用:
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
方法区:静态成员、构造函数、常量池、线程池
本地方法区:window系统占用
希望楼主可以理解,说的有什么不对的,欢迎批评指正。 |