详解JVM内存结构组成

开发 后端
这里向大家描述一下JVM内存结构,JVM内存结构主要包括两个子系统和两个组件。两个子系统分别是Classloader子系统和Executionengine(执行引擎)子系统。

你对JVM内存结构是否了解,这里和大家分享一下,JVM内存结构主要包括两个子系统和两个组件,这两个组件分别是Runtimedataarea(运行时数据区域)组件和Nativeinterface(本地接口)组件。

JVM内存结构

近期看了看Java内存泄露的一些案例,跟原来的几个哥们讨论了一下,深入研究发现JVM里面还是有不少以前不知道的细节,这里稍微剖析一下。先看一看JVM内部结构——

JVM内存结构


如图所示,JVM内存结构主要包括两个子系统和两个组件。两个子系统分别是Classloader子系统和Executionengine(执行引擎)子系统;两个组件分别是Runtimedataarea(运行时数据区域)组件和Nativeinterface(本地接口)组件。

Classloader子系统的作用:

根据给定的全限定名类名(如java.lang.Object)来装载class文件的内容到Runtimedataarea中的methodarea(方法区域)。Java程序员可以extendsjava.lang.ClassLoader类来写自己的Classloader。

Executionengine子系统的作用:

执行classes中的指令。任何JVMspecification实现(JDK)的核心都是Executionengine,不同的JDK例如Sun的JDK和IBM的JDK好坏主要就取决于他们各自实现的Executionengine的好坏。

Nativeinterface组件:

与nativelibraries交互,是其它编程语言交互的接口。当调用native方法的时候,就进入了一个全新的并且不再受虚拟机限制的世界,所以也很容易出现JVM无法控制的nativeheapOutOfMemory。

RuntimeDataArea组件:

这就是我们常说的JVM的内存了。它主要分为五个部分——

1、Heap(堆):一个Java虚拟实例中只存在一个堆空间

2、MethodArea(方法区域):被装载的class的信息存储在Methodarea的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class文件,然后读入这个class文件内容并把它传输到虚拟机中。

3、JavaStack(java的栈):虚拟机只会直接对Javastack执行两种操作:以帧为单位的压栈或出栈

4、ProgramCounter(程序计数器):每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。PC寄存器的内容总是指向下一条将被执行指令的饿地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。

5、Nativemethodstack(本地方法栈):保存native方法进入区域的地址

以上五部分只有Heap和MethodArea是被所有线程的共享使用的;而Javastack,Programcounter和Nativemethodstack是以线程为粒度的,每个线程独自拥有自己的部分。本节关于JVM内存结构简单介绍到这里。

【编辑推荐】

  1. 深入了解JVM内存结构
  2. 探索Java工作原理之JVM内存回收
  3. JVM基础:解析JVM分代垃圾回收策略
  4. JVM for Linux JIT诊断技术简介
  5. 巧解IBM JVM for Linux onPOWER性能调优

 

 

责任编辑:佚名 来源: tech.e800.com.cn
相关推荐

2012-01-11 10:45:57

JavaJVM

2010-09-26 11:32:39

JVM结构

2010-09-25 12:54:24

JVM内存

2017-09-20 08:48:09

JVM内存结构

2010-09-16 15:24:16

JVM结构

2010-09-27 09:43:07

JVM体系结构

2010-09-25 12:38:40

JVM内存模型

2023-11-06 07:21:13

内存结构Jvm

2010-09-27 09:31:42

JVM内存结构

2010-09-26 13:23:13

JVM内存管理机制

2010-09-25 13:38:23

Inside JVM

2018-11-01 10:34:37

JVM内存配置

2010-12-10 15:40:58

JVM内存管理

2019-05-06 08:37:14

JVMLinux内存

2021-08-13 08:15:23

JVM 虚拟机Java

2018-10-12 11:11:39

Oracle内存结构

2018-07-04 14:43:55

对象模型内存结构内存模型

2013-03-29 11:09:17

JVM内存

2010-04-27 09:17:23

内存屏障JVM

2019-09-02 14:53:53

JVM内存布局GC
点赞
收藏

51CTO技术栈公众号