Java虚拟机内存模型

虚拟机运行时数据区域(内存模型)
1、程序计数器
作用:当前线程所执行的字节码的行号指示器,为线程单独享有。
2、虚拟机栈
线程私有,生命周期和线程相同,虚拟机栈是java执行的内存模型。
作用:java的方法(函数)运行时,都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链表
如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError.
3、本地方法栈
作用:为虚拟机使用到的Native方法(java程序调用了一个非java语言编写的程序)服务。
如果调用的栈过深,就会抛出StackOverflowError.
4、Java堆(java heap)重点
作用:存放对象实列。是线程共享的
java heap 是垃圾收集器(内存回收器)的主要区域。
根据内存回收器的分代算法还可以细分为:新生代和老年代
Eden 空间,From Survivor空间,To Survivor空间。
可以通过虚拟机的参数设置调节 -Xmx(java heap的最大使用内存) 和 -Xms(java heap的初始化内存)控制
当程序运行需要生产大量对象时,且堆也无法向系统申请内存时,将会抛出OutOfMemoryError异常
5、方法区:(Non-heap)
作用:是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息,常量(final),静态变量(static)
、及时编译器编译后的代码数据
细分:运行时常量池。(各种字面符号和符号引用)
java对象在虚拟机中的创建过程
虚拟机遇到new 指令--->检查常量池中是否有符号引用----> 否:执行类加载
有:为对象在堆内分配空间。分配的方式可以分为:1、指针碰撞法
2、空闲列表

posted @ 2019-02-22 12:21  孤独思想者  阅读(89)  评论(0编辑  收藏  举报