java虚拟机(jvm:java virtual machine)中
重要的内存区域:
1、
方法区:用来存放已经加载的类信息、常量、静态变量以及方法代码的内存区域。
2、
堆区(堆内存):存放类的对象,即存放实例。
3、
栈区(栈内存):由一个一个的栈帧组成的先进后出的栈结构,栈帧存放方法运行时产生的局部变量、方法出口等信息。当调用一个方法时,栈中分配一个栈帧区域存放这些数据,当方法调用完成时,栈帧释放。如果方法中调用了其他方法,则继续在栈顶创建新的栈帧。
4、
常量池:是方法区的一部分,主要存放常量以及类中的符号、引用等信息。
5、
本地方法栈
6、
程序计数器
java的生命周期:当编写好java源文件后(.java文件),经过编译会生成一个.class文件,这种文件叫做字节码文件,只有这种字节码文件才能够在java虚拟机中运行,java类的生命周期就是指一个class文件从加载到卸载的全过程。如下图:
上图中的加载、链接、初始化三个阶段为类加载的过程。
1、加载:
第一步加载,找到需要加载的类并把类的信息加载到jvm的方法区中,然后在堆内存区域实例化一个java.lang.Class对象,作为方法区中该类的信息的入口。
2、链接:(待续……)类的加载方式通常有两种,一种是根据类的全路径名找到相应的class文件,然后从class文件中读取内容;另一种是从jar文件中读取。加载的时机:加载时机取决于具体的jvm实现,一种是当jvm“预期”到一个类将要被使用,就会在使用它之前对这个类进行加载。另一种是当真正用到一个类的时候才对它进行加载。