JVM:java运行时数据区和内存结构

一、运行时数据区

在这里插入图片描述

  1. 类加载器:JVM启动或类运行时将class文件加载到JVM中
  2. 执行引擎:负责执行class文件中的字节码指令
  3. 内存区:即运行时数据区
  4. 本地接口:主要是调用C或C++实现的本地方法

一)堆

是Java虚拟机所管理的内存中最大的一块。由所有线程共享,在虚拟机启动时创建。堆区唯一目的就是存放对象实例。
是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”。

二)方法区

jdk1.8后被叫做元空间。
在这里插入图片描述

三)程序计数器

当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。分支、循环等都依赖这个计数器。
唯一没有规定任何OutOfMemoryError情况的区域。

四)java虚拟机栈

每个方法被执行时会创建一个栈帧,用于存放局部变量表等等,当该方法被执行完成时,就完成在栈帧中的入栈和出栈。
规定的异常情况有两种:1.线程请求的栈的深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;2.如果虚拟机可以动态扩展,如果扩展时无法申请到足够的内存,就抛出OutOfMemoryError异常。

五)本地方法栈

虚拟机使用到native方法。用native修饰符
在这里插入图片描述

二、内存结构

在这里插入图片描述

一)堆内存

  1. 线程共享
  2. 分为年轻代和年老代
  3. 年轻代又分为:Eden、From Survivor、To Survivor
    EdenSpace:伊甸园,对象刚刚被创建时存储的区域;
    From Survivor和To Survivor是大小相等的两块区域,在同一时间节点只有一个区域存有数据。

二)方法区

线程共享。也叫永久代。

三)栈内存

  1. 线程私有
  2. 包括Java虚拟机、本地方法栈、程序计数器

四)参数配置

在这里插入图片描述
欢迎关注同名公众号:“我就算饿死也不做程序员”。
交个朋友,一起交流,一起学习,一起进步。在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值