码迷,mamicode.com
首页 > 其他好文 > 详细

JVM---运行时数据区域

时间:2019-02-12 17:18:29      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:字节   语言   内存   局部变量   --   运行时数据区   深度   def   信息   

1、程序计数器

  1.1  一块较小的内存空间、可以看作是当前线程所执行的字节码的行号指示器;

  1.2  在JVM的概念模型中,字节码解释器的作用:通过改变程序计数器的值来选取下一条需要执行的字节码指令(分支、循环、异常处理、线程恢复等基础功能

      都需要依赖程序计数器来实现);

  1.3  JVM的多线程实现方式:

        通过线程轮流切换  并分配处理器执行时间

     为了线程切换后能恢复到正确的执行位置,每个线程必须有独立的程序计数器,各计数器独立存储、互不影响;

  1.4  如果线程执行的是一个Java方法,程序计数器中记录的是正在执行字节码指令的地址;

     如果线程执行的是一个native方法,程序计数器的值为空(undefined);

  1.5  生命周期同线程;

2、Java虚拟机栈

  1.1  生命周期同线程;

  1.2  描述的是Java方法执行的内存模型:

        每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、方法出口等信息;

        每个方法从调用到执行完成,对应着一个栈帧在Java虚拟机栈中入栈到出栈的过程;

  1.3  在JVM规范中,对Java虚拟机栈规定了2种异常情况:

        如果线程请求的栈深度大于JVM所允许的深度,则抛出StackOverflowError异常;

        如果栈可以动态扩展,扩展时无法申请到足够的内存,则抛出OutOfMemoryError异常;

3、本地方法栈

  1.1  生命周期同线程;

  1.2  作用:为虚拟机用到的native方法服务;

  1.3  在JVM规范中,对本地方法栈中方法的使用语言、使用方式、数据结构没有做强制要求,具体的虚拟机可以自由实现它,

      甚至有的虚拟机直接将Java虚拟机栈和本地方法栈合二为一;

  1.4  同Java虚拟机栈规定了StackOverflowError异常、OutOfMemoryError异常;

4、Java堆

  1.1  生命周期同进程;

  1.2  被所有线程共享;

  1.3  作用:存放对象实例;

  1.4  又称“GC堆”

  1.5  在JVM规范中,如果没有多余内存分配对象实例,并且堆也无法扩展,抛出OutOfMemoryError异常;

5、方法区

  1.1  生命周期同进程;

  1.2  被所有线程共享;

  1.3  用于存储已被虚拟机加载的类信息、常量、静态变量等数据;

  1.4  在JVM规范中,当方法区无法满足内存分配需求时,抛出OutOfMemoryError异常;

JVM---运行时数据区域

标签:字节   语言   内存   局部变量   --   运行时数据区   深度   def   信息   

原文地址:https://www.cnblogs.com/anpeiyong/p/10365877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!