首页 > 代码库 > Java千百问_07JVM架构(002)_jvm实例的结构是什么样的

Java千百问_07JVM架构(002)_jvm实例的结构是什么样的

点击进入_更多_Java千百问

1、jvm实例的结构是什么样的

在Java虚拟机规范中,一个虚拟机实例的行为主要组成部分为:子系统内存区域数据类型指令
这些组件描述了JVM内部的一个抽象结构。与其说这些组成部分的目的是进行JVM内部结构的一种支配,不如说是提供一种对外部行为的严格定义,该规范定义了这些抽象组成部分的相互作用,以及Java虚拟机执行所需要的行为

了解jvm内存管理看这里:java内存模型是什么样的
下图描述了JVM实例的一个内部结构,其中主要包括主要的子系统内存区域

技术分享

我们来解读一下这个JVM实例的结构图:

  1. Java虚拟机有一个类加载器(class loader subsystem)作为JVM的子系统,类加载器针对Class文件进行检测来加载对应的类接口

  2. JVM内部有一个执行引擎(exection engine),用来负责代码的解释和执行

  3. 当JVM运行程序的时候,它的内存用来存储包括字节码、从类文件中提取出来的一些附加信息、以及程序中实例化的对象方法参数返回值局部变量以及计算的中间结果等很多内容。

  4. JVM的内存管理分为两部分:每个JVM实例有一个方法区和一个内存堆,这两个区域储存了素有线程的共享数据;每个新的线程启动后,都会被分配自己的PC寄存器(PC registers,程序计数器器)、本地方法栈空间(native method stacks)、栈空间(Java stacks),来储存线程内部的数据。

了解内存分配策略看这里:内存分配有哪些策略
了解jvm是如何管理内存的看这里:jvm是如何管理内存的

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    Java千百问_07JVM架构(002)_jvm实例的结构是什么样的