首页 > 编程语言 > 详细

Java虚拟机内存模型

时间:2019-02-22 12:38:51      阅读:145      评论:0      收藏:0      [点我收藏+]

虚拟机运行时数据区域(内存模型)
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、空闲列表

Java虚拟机内存模型

原文:https://www.cnblogs.com/aiqixiansheng/p/10417664.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!