每天学一点:java虚拟机

虚拟机会为每个装在的类型存储:
1、该类型常量池:存储了相应类型所有用到的类型、字段和方法的符号引用,包括常量(Integer、String、float point常量)和对其它类型、字段、方法的符号引用。池中数据像数组一样是通过索引访问;
2、字段信息:包含字段名、字段类型、字段修饰符;
3、方法信息:方法名、返回类型、方法参数的数量和类型(按声明顺序)、方法修饰符;

类(静态)变量:只与类有关--而非类的实例,作为类型信息的一部分存储在方法区;
编译时常量(final声明以及用编译时一直的值初始化的类变量):使用编译时常量的类型都会复制它的所有常量到自己的常量池中,或嵌入到它的字节码流中。编译时常量保存在方法区中。


当类A调用类B时,首先会在A的常量池中生成“B”的“常量字符串”,待B.class加载后使用指向方法区B类数据的指针来进行替换。
这个替换过程成为常量池解析,即吧常量池中的符号引用替换为直接饮用,通过在方法区中搜索被引用的袁术实现,这期间可能需要加载其他类。
java程序在运行时创建的所有类实例或数组都放在同一个堆中,所有线程共享这个堆。
由java虚拟机控制堆空间(内存)的释放--垃圾回收机制。

猜你喜欢

转载自baoxiaofei.iteye.com/blog/2272014