美文网首页
有请题目登场:   简述JVM虚拟机由哪几部分组成?

有请题目登场:   简述JVM虚拟机由哪几部分组成?

作者: 小雨晞晞 | 来源:发表于2019-08-15 11:28 被阅读0次

程序计数器  程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,可以理解为是当前线程的行号指示器。字节码解释器在工作时,会通过改变这个计数器的值来取下一条语句指令。

虚拟机栈  一个线程的每个方法在执行的同时,都会创建一个栈帧(Statck Frame),栈帧中存储的有局部变量表、操作站、动态链接、方法出口等,  当方法被调用时,栈帧在JVM栈中入栈,当方法执行完成时,栈帧出栈。  局部变量表中存储着方法的相关局部变量,包括各种基本数据类型,对象的引用,返回地址等。 虚拟机栈中定义了两种异常,如果线程调用的栈深度大于虚拟机允许的最大深度,则抛出StatckOverFlowError(栈溢出);不过多数Java虚拟机都允许动态扩展虚拟机栈的大小(有少部分是固定长度的),所以线程可以一直申请栈,直到内存不足,此时,会抛出OutOfMemoryError(内存溢出)。

本地方法栈  本地方法栈在作用,运行机制,异常类型等方面都与虚拟机栈相同,唯一的区别是:虚拟机栈是执行Java方法的,而本地方法栈是用来执行native方法的,在很多虚拟机中(如Sun的JDK默认的HotSpot虚拟机),会将本地方法栈与虚拟机栈放在一起使用。

堆区 在JVM所管理的内存中,堆区是最大的一块,堆区也是Java GC机制所管理的主要内存区域,堆区由所有线程共享,在虚拟机启动时创建。堆区的存在是为了存储对象实例,原则上讲,所有的对象都在堆区上分配内存(不过现代技术里,也不是这么绝对的,也有栈上直接分配的)。

方法区 方法区是各个线程共享的区域,用于存储已经被虚拟机加载的类信息(即加载类时需要加载的信息,包括版本、field、方法、接口等信息)、final常量、静态变量、编译器即时编译的代码等。直接内存  直接内存并不是JVM管理的内存,可以这样理解,直接内存,就是JVM以外的机器内存,比如,你有4G的内存,JVM占用了1G,则其余的3G就是直接内存,JDK中有一种基于通道(Channel)和缓冲区(Buffer)的内存分配方式,将由C语言实现的native函数库分配在直接内存中,用存储在JVM堆中的DirectByteBuffer来引用。由于直接内存收到本机器内存的限制,所以也可能出现OutOfMemoryError的异常。

相关文章

  • 有请题目登场:   简述JVM虚拟机由哪几部分组成?

    程序计数器 程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,可以理解为是当前线程...

  • JVM——基本结构

    前言 只有了解了JVM的组成部分,才能算的上真正的了解了JVM,JVM的组成5个部分:堆、虚拟机栈、本地方法栈、程...

  • 笔记:WebView

    1.webview的组成由哪几部分组成 答:由四个部分组成1.WebSettings 负责webview的设置部分...

  • 面试官:JDK8内存分布

    内存组成部分 根据 JVM 规范,JVM内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 虚拟机栈...

  • JVM

    一、jvm组成 JVM由4大部分组成:ClassLoader,Runtime Data Area,Executio...

  • 理解JVM(3)- 运行时数据区

    前一篇我们从整体上认识一下JVM由哪些部分组成,现在我们开始着重了解JVM的核心部分-运行时数据区 Java虚拟机...

  • 58 - ASM之JVM Architecture

    JVM的组成部分 从JVM组成的角度来说,它由Class Loader SubSystem、Runtime Dat...

  • JVM

    JVM组成 jvm由类加载器+内存+执行引擎 JVM内存区域 堆 线程共享 存储对象 虚拟机栈 线程私有,生命周期...

  • Hadoop由哪几部分组成?

    Hadoop是一个能够对大量数据进行分布式处理的软件框架,以一种可靠、高效、可伸缩的方式进行数据处理,其有许多元素...

  • 阿里面试官都爱问的内存管理和GC算法及回收策略

    JVM内存组成结构 JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示: JVM内存回收 Sun的JV...

网友评论

      本文标题:有请题目登场:   简述JVM虚拟机由哪几部分组成?

      本文链接:https://www.haomeiwen.com/subject/konajctx.html