JVM内存区域

一、运行时数据区域

  1.  1.8版本之前:运行时数据区域包括线程共享的堆和方法区(包含运行时常量池);线程私有的虚拟机栈、本地方法栈和程序计数器。直接内存。
  2. 1.8版本之后:运行时数据区域包括线程共享的堆;线程私有的虚拟机栈、本地方法栈和程序计数器。直接内存。

二、各部件功能

1、 程序计数器

【1】功能描述:

      (1)广义:配合字节码解释器的工作,让线程切换后得以恢复到正确的位置,每条线程都需要                 有一个独立的程序计数器。

       (2)狭义:

               1)字节码解释器通过改变程序计数器来依次读取指令(选取下一条需要执行的字节码指                         令),从而实现代码的流程控制。

                2)多线程的情况下,程序计数器用来记录当前位置,当线程被切换回来的时候就可以知                          道该线程上次运行到哪儿了。

【2】特点:各个线程之间的程序计数器互不影响、独立存储,每条线程都有一个独立的程序计数器。不会出现outofMemoryError,生命周期与程序计数器一样。

2、虚拟机栈

【1】功能描述:由一个个栈帧组成,存放局部变量表(存放编译期可知的各种数据类型、对象引             用)、操作数栈、动态连接、方法出口信息。每次函数调用都会有一个对应的栈帧被压入Java           栈,每一个函数调用结束,都会有一个栈帧被弹出。返回方式有以下两种形式:

       (1)return语句;

       (2)抛出异常;

【2】特点:Java 虚拟机栈会出现两种错误:StackOverFlowError 和 OutOfMemoryError

3、本地方法栈

【1】功能描述:运行Native方法。被执行的时候本地会创建一个栈帧,方法执行完毕弹出栈帧同时           释放内存空间也会出现 StackOverFlowError 和 OutOfMemoryError 两种错误。

4、堆

【1】功能描述:存放对象实例。

       (1)分为:新生代(Eden区、Survivor0、Survivor1)、老生代

        (2)对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进                     入 s0 或者 s1,并且对象的年龄还会加 1(Eden 区->Survivor 区后对象的初始年龄变为                       1),当它的年龄增加到一定程度(默认为 15 岁),就会被晋升到老年代中。

5、方法区

【1】功能描述:称为永久代。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值