java运行时内存区域划分(1)

来源:互联网 发布:geohot编程能力 编辑:程序博客网 时间:2024/05/21 11:09

剧情预告

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。

    列举一下:

    1.方法区

    2.虚拟机栈

    3.本地方法栈

    4.堆

    5.程序计数器

    java虚拟机内存划分

    运行时中划分大致就是这么5个区域。

1.程序计数器

    程序计数器是一块比较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。通俗来说,就是用来给当前线程计数当前执行到哪里了。



1 public void test(){2     int a = 0;3     a += 1;4     int b = 1;5     b += a;6 }


    而程序计数器就是用来控制当前执行到了哪一行字节码。


    分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。看来还是必不可少的啊。

    Java中的多线程,是通过线程轮流切换并分配CPU时间来实现的,在某一时刻,一个CPU只会执行一跳线程中的指令,所以,每个线程都需要一个独立的程序计数器,来保证各个线程之间互不影响,因此,这些占用的内存都是线程私有的内存。

    注意:如果正在执行的是Native方法,那么这个计数器的值为空(Undefined)。


2.Java虚拟机栈

    这又是神马?

    这么说吧,它就是一个与线程生命周期相同的玩意儿,因为在方法被执行的时候,都会产生一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。

    从执行到方法被执行完的过程,也就是栈帧在虚拟机栈中入栈到出栈的过程。

public void a(){    b();}public b(){    c();}public c(){     d();}...



    java虚拟机栈

    每次调用都会产生一个栈帧,栈帧的深度是有限的,如果一直嵌套,就会溢出,产生StackOverflowError。

    如果你问我什么是栈,简单解释一下,这东西就是后进先出的一个结构,好比一个纸箱子,你先放进去的东西,压在箱底,又放了东西,一直放知道放满了之后,想拿出来,肯定是从最后放的那个开始拿出来,最先放进去的在最底下,最后才拿的出来,这个解释清楚了吧。

    所以你知道为何别人都说,栈内存中存放的是变量而不是实际对象了吧,说的就是这个栈。

    请注意:栈这个东西是有限制的,不能无限往里放,就像那箱子,总有放满的时候,那时候,哼哼,你等着收到StackOverflowError异常吧!别怪人没提醒你!


----------------------------------------------------------------------------------------------    

    本次节目到这里,下集预告:

    为何本地方法栈同样是栈出身,命运却不同?

    为何堆内存中对象频频失窃,是规范的沦丧?还是虚拟机的扭曲?


    请关注下期节目《关于java的运行时数据区域划分(下)》  


    转载注明原文出处 http://blog.gaoqixhb.com/p/53db9de054fe5ed14e5d3300

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 12306退票支付宝失败怎么办 12306重复支付怎么办支付宝 支付宝登的12306账号怎么办 没买儿童高铁票怎么办 网上订的机票怎么办托运 半夜买高铁票不出票怎么办 轻轨少买了一站怎么办 高铁火车票丢了怎么办 如果高铁票丢了怎么办 高铁票丢了怎么办 报销 高铁如果没赶上怎么办 高铁管家待核验怎么办 动车没有票了怎么办 12306取消订单3次怎么办 【12306取消订单3次怎么办】 火车票取消订单3次怎么办 12306收不到验证码怎么办 安逸花验证码次数限制怎么办 航班晚点导致错过转机怎么办 想去沈阳站送站怎么办 高铁没有赶上车怎么办 火车晚点赶不上下一趟车怎么办 列车晚点影响下一趟车怎么办? 高铁晚点赶不上下班车怎么办 火车在半路坏了怎么办 做火车中途坏了怎么办 员工怀孕不上班保险怎么办 怀孕带孩子不能上班保险怎么办 怀孕了不想上班保险怎么办 高铁票没票了怎么办 购买动车票无座怎么办 个税工资多报怎么办 火车晚点耽误了转车怎么办 坐火车联系不上怎么办 号码被别人注册了12306怎么办 注册12306的号码换了怎么办 12306号码被注册了怎么办 12306身份证被注册了怎么办 12306被别人注册了怎么办 铁路1236注册名忘记了怎么办 12306手机被别人注册了怎么办