JVM Specification 整体架构

JVM Specification 整体架构

出自:http://developer.51cto.com/art/201009/227977.htm

你对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内存结构简单介绍到这里。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100467.html原文链接:https://javaforall.net

(0)
上一篇 2021年5月10日 下午3:00
下一篇 2021年5月10日 下午4:00


相关推荐

  • 手机上编写Java程序的软件

    手机上编写Java程序的软件对于程序员来说,编写代码几乎都是在电脑上,但有时候在一些特殊情况下,没有电脑,或者不方便带电脑,这时就想,要是能在手机上写代码该多好啊。以前我也折腾过,找过许多软件,但感觉不如我意;但我并没有放弃,在浏览YouTube的时候,偶然发现了一款软件,好奇的我就下载来试了试,还真是好用,功能挺齐全的。下面就给大家推荐一下。Android系统由于本人用的是Android手机,就主要讲讲在Android…

    2022年6月9日
    37
  • docker(11)Dockerfile 中的COPY与ADD 命令[通俗易懂]

    docker(11)Dockerfile 中的COPY与ADD 命令[通俗易懂]前言Dockerfile中提供了两个非常相似的命令COPY和ADD,本文尝试解释这两个命令的基本功能,以及其异同点,然后总结其各自适合的应用场景。Build上下文的概念在使用dock

    2022年7月31日
    11
  • python3.0菜鸟教程100例_python入门到精通教程完整版

    python3.0菜鸟教程100例_python入门到精通教程完整版Python3100例原题地址:http://www.runoob.com/python/python-100-examples.htmlgit地址:https://github.com/RichardFu123/Python100Cases原例为Python2.7版本重写过程中有不少是随意发挥的重写运行版本:Python3.7总…

    2026年1月29日
    6
  • 一起学JAVA 接口 面向接口开发

    一起学JAVA 接口 面向接口开发接口 1 接口的概念接口 英文 Interface 在 JAVA 编程语言中是一个抽象类型 是抽象方法的集合 接口通常以 interface 来声明 一个类通过继承接口的方式 从而来继承接口的抽象方法 接口并不是类 编写接口的方式和类很相似 但是它们属于不同的概念 类描述对象的属性和方法 接口则包含类要实现的方法 除非实现接口的类是抽象类 否则该类要定义接口中的所有方法 接口无法被实例化 但是可以被实现 一个实现接口的类 必须实现接口内所描述的所有方法 否则就必须声明为抽象类 另外 在 Java 中 接口

    2026年3月17日
    3
  • 11种经典滤波算法「建议收藏」

    11种经典滤波算法「建议收藏」1、限幅滤波法(又称程序判断滤波法)  A、方法:      根据经验判断,确定两次采样允许的最大偏差值(设为A)      每次检测到新值时判断:      如果本次值与上次值之差<=A,则本次值有效      如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值  B、优点:      能有效克服因偶然因素引起的脉冲干扰…

    2022年5月3日
    70
  • 绘制PR曲线[通俗易懂]

    绘制PR曲线[通俗易懂]一、获取txt文件运行darknet官方代码中的darknetdetectorvaliddatacfgweight指令(例如:darknet.exedetectorvaliddata/koujian/koujian.datacfg/yolov3-tiny11.cfgbackup/yolov3-tiny11_last.weights),可以在result/目录下得到网络检测的输出txt文件:包括检测的图像名字、类别、概率、边界框位置(左上角和右下角):二.新建两个文件:rev

    2022年6月26日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号