Java面试题——JVM存储区划分及是否线程隔离

  • JVM系统划分
  • 运行时数据区划分
  • 一道单选题

JVM系统划分

java虚拟机包括一个类加载器子系统(Class Loader SubSystem)、运行时数据区(Runtime Data Area)、执行引擎和本地接口库(Native Interface Library)。本地接口库通过调用本地方法库(Native Method Library)与操作系统交互。

  1. 类加载器子系统用于将编译好的class文件加载到JVM中;
  2. 运行时数据区用于存储在JVM运行过程中产生的数据,包括程序计数器、方法区、本地方法区、虚拟机栈和虚拟机堆;
  3. 执行引擎包括即时编译器和垃圾回收器,即时编译器用于将Java字节码编译成具体的机器码,垃圾回收器用于回收在运行过程中不再使用的对象;
  4. 本地接口库用于调用操作系统的本地方法库完成具体的指令操作。

运行时数据区划分


JVM初始运行的时候都会分配好 Method Area(方法区) 和Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) , JVM Stack(虚拟机栈)和Native Method Stack (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。线程隔离的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说只发生在Heap上)的原因。

方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域。
同时方法区域是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。

一道单选题

下面有关JVM内存,说法错误的是?

  • A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的.
  • B.虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
  • C.方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的
  • D.原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

方法区是线程共享的,C错。

JVM存储区划分及是否线程隔离相关推荐

  1. C/C++内存分配、内存区划分、常量存储区、堆、栈、自由存储区、全局区(静态区)、代码区

    C/C++内存分配.内存区划分.常量存储区.堆.栈.自由存储区.全局区 C++中,内存分成几个区: 栈(stack) 堆(heap) 自由存储区 全局/静态存储区 常量存储区 代码区 对于C++的内存 ...

  2. Java 运行时数据区域,哪些是线程隔离的?哪些又是公有的?

    来自:会点代码的大叔 JVM 运行时数据区域大致可以分为:程序计数器.虚拟机栈.本地方法栈.堆区.元空间.运行时常量池.直接内存等区域:就是下面这个样子的: 其中有些区域,随着 JDK 版本的升级不断 ...

  3. java8堆内存模型_「GC系列」JVM堆内存分代模型及常见的垃圾回收器

    1. 内存分代模型 为什么要说JVM的内存分代模型呢,因为内存分代和垃圾回收器的运行是有关系的. 现在大部分用到的垃圾回收器在逻辑上是分代的,除了G1之外的其他垃圾回收器在逻辑上和物理上都是分代的. ...

  4. Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失(续)

    前言 上篇文章<Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失>我们对ThreadLocal数据丢失进行了详细的分析,并通过代码的方式复现了这个问题. ...

  5. 深入理解JVM虚拟机(十一):线程安全与锁优化

    1. 线程安全 线程安全的定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得 ...

  6. 一文探讨 RPC 框架中的服务线程隔离

    Kirito 推荐语:最近秋招开始了,很多学生开始准备起了秋招,有很多人想知道进一些有名的互联网公司实习有什么要求,正好最近跟一位阿里春招的实习小伙子聊了一些 RPC 相关的知识点,于是我把这篇他的思 ...

  7. Spring整合mybatis中的sqlSession是如何做到线程隔离的?

    转载自  Spring整合mybatis中的sqlSession是如何做到线程隔离的? 项目中常常使用mybatis配合spring进行数据库操作,但是我们知道,数据的操作是要求做到线程安全的,而且按 ...

  8. Web后端学习笔记 Flask(11)Local线程隔离对象

    flask中的上下文:应用上下文和请求上下文 1. 在flask中,是通过request对象获取用户提交的数据,但是在整个程序运行中,只有一个request对象.在实际应用场景中,会有多个用户同时进行 ...

  9. 深入理解JVM之代码执行机制与线程资源同步及交互机制

    Java规范定义标准结构如图3.1 Java代码的执行机制 Java源码编译机制 javac将Java源码编译为class文件的步骤如图3.2 1.分析和输入到符号表(Parse and Enter) ...

最新文章

  1. 刘宇凡:群生?群死?群P?
  2. 在ASP.NET AJAX 1.0框架中访问Web服务
  3. kettle组件-查询
  4. hadoop深入研究:(五)——Archives
  5. H264实时编码及NALU,RTP传输(ZZ)
  6. Head First Design Pattern: 策略模式
  7. 如何做思维导图?用这两个软件就可以了
  8. 遗传算法 神经网络 深度学习 概率论 模糊数学 之间有什么区别?
  9. 【矩阵计算GPU加速】numpy 矩阵计算利用GPU加速,cupy包
  10. Python调用高德地图API测距
  11. ReactNative 深层连结
  12. 同步、异步 阻塞、非阻塞
  13. 各种css hack - 兼容性探测
  14. 雷达原理习题【西电】
  15. 总体样本与样本均值X拔的一个重要公式推导
  16. 01 C语言实现动态气泡碰撞和移动的效果,小球碰撞,Win7气泡壁纸,碰撞算法
  17. 复杂背景下的自动驾驶目标检测数据集
  18. 插值法位同步 gardner算法
  19. 网上书店订单流程c语言源代码,网上书店的设计及实现.doc
  20. python中chr函数的用法_【转】Python内置函数(10)——chr

热门文章

  1. 2019年支付宝如何缴纳城乡居民医保费 用支付宝缴居民医疗保费金额多少
  2. OpenHarmony开源鸿蒙无人机来了
  3. [南帝北丐]快速升级20级全攻略
  4. Linux上3gp转mp4
  5. h5引用项目里css_HTML中引入CSS 的方式
  6. 两步解决端口冲突(超高效)
  7. 帮我写个项目可用的抽奖python代码
  8. 女生计算机软件还是硬件,对于女生来说,计算机专业选软件好呢,还是硬件?...
  9. python opencv图像剪裁
  10. ACM会议论文投稿前期准备