8道 JVM ⾯试题(内存区域划分)

本文详细介绍了JVM的运行时数据区,包括程序计数器、Java虚拟机栈、本地方法栈、堆、方法区(包含运行时常量池)以及直接内存,分析了各区域的作用、异常情况以及它们在Java程序执行过程中的关键角色。
摘要由CSDN通过智能技术生成

8道 JVM ⾯试题–内存区域划分

Q1:运⾏时数据区是什么?

虚拟机在执⾏ Java 程序的过程中会把它所管理的内存划分为若⼲不同的数据区,这些区域有各⾃的⽤途、创建和销毁时间。

线程私有:程序计数器、Java 虚拟机栈、本地⽅法栈。线程共享:Java 堆、⽅法区。

Q2:程序计数器是什么?

程序计数器是⼀块较⼩的内存空间,可以看作当前线程所执⾏字节码的⾏号指示器。字节码解释器⼯作 时通过改变计数器的值选取下⼀条执⾏指令。分⽀、循环、跳转、线程恢复等功能都需要依赖计数器完 成。是唯⼀在虚拟机规范中没有规定内存溢出情况的区域。

如果线程正在执⾏ Java ⽅法,计数器记录正在执⾏的虚拟机字节码指令地址。如果是本地⽅法,计数器值为 Undefined。

Q3:Java虚拟机栈的作用?

Java 虚拟机栈来描述 Java ⽅法的内存模型。每当有新线程创建时就会分配⼀个栈空间,线程结束后栈空间被回收,栈与线程拥有相同的⽣命周期。

栈中元素⽤于⽀持虚拟机进⾏⽅法调⽤,每个⽅法在执⾏ 时都会创建⼀个栈帧存储⽅法的局部变量表、操作栈、动态链接和⽅法出⼝等信息。

每个⽅法从调⽤到执⾏完成,就是栈帧从⼊栈到出栈的过程。

有两类异常:① 线程请求的栈深度⼤于虚拟机允许的深度抛出 StackOverflowError。② 如果 JVM 栈容量可以动态扩展,栈扩展⽆法申请⾜够内存抛出 OutOfMemoryError(HotSpot 不可动态扩展,不存在此问题)。

Q4:本地方法栈的作用?

本地⽅法栈与虚拟机栈作⽤

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值