liyueyue的gravatar头像
liyueyue 2019-02-17 19:43:20
Java虚拟机几个点

程序计数器:当前线程所执行的字节码的行号指示器。
Java虚拟机栈:描述Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

本地方法栈:为虚拟机使用到的Native方法服务。

堆:存放对象实例。

方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

2. 堆里面的分区:Eden,survival from、survival to,老年代,各自的特点

Eden区的对象都是朝生夕死,发生minor gc的时候会清除eden区和survival区的,把存活的对象移到另一个Survival区,该survial区由老年代保证。当在年轻代中对象经过多次minor gc以后还存活,达到老年代的年纪,就会移动到老年代,还有就是大对象在年轻代无法存储,直接转到老年代,还有可能因为担保而进入老年代的

3. 对象创建方法,对象的内存分配,对象的访问定位

1对象的创建包括三步骤:①当遇到new命令的时候,会在常量池中检查该对象的符号引用是否存在,不存在则进行类的加载,否则执行下一步②分配内存,将将要分配的内存都清零。③虚拟机进行必要的设置,如设置hashcode,gc的分代年龄等,此时会执行<init>命令在执行之前所有的字段都为0,执行<init>指令以后,安装程序的意愿进行初始化字段。

2:对象的内存分配:包括对象头,实例数据,对齐填充

①对象头:包括对象的hascode,gc分代年龄,锁状态标等。

②实例数据:也就是初始化以后的对象的字段的内容,包括父类中的字段等

③对齐填充:对象的地址是8字节,虚拟机要求对象的大小是对象的整数倍(1倍或者两倍)。因此就会有空白区


打赏
最近浏览
a342108611  LV5 2019年2月27日
shixiaohua  LV4 2019年2月25日
最代码官方  LV167 2019年2月17日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友