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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot面试题整理,常问SpringBoot面试题汇总(2020版)

    SpringBoot面试题整理,常问SpringBoot面试题汇总(2020版)找工作的历程太艰难,面试的过程很心烦,在没着落的每一天,心情都不太美妙,这时的我们唯一能做的就是多总结,多做准备,这样,起码心里会好受些!所以我准备了一点SpringBoot的面试题,为还正在找工作的小伙伴多增加些成功的筹码!1、什么是SpringBoot?SpringBoot是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。2、SpringBoot有哪些优点?.

    2022年5月21日
    38
  • 学习Python之路之ipython的使用及Pycharm的安装[通俗易懂]

    学习Python之路之ipython的使用及Pycharm的安装[通俗易懂]一、Python的基础知识1、概念Python是一种面向对象的解释型计算机程序设计语言,由荷兰人GuidovanRossum于1989年发明,第一个公开发行版发行于1991年。2、Python的特点优点:简单、优雅、明确 有强大的第三方库模块 可跨平台移植 一种面向对象的语言缺点:代码执行速度慢,相比C语言,不过现在python的异步并发框架导致执行速度慢 p…

    2022年8月27日
    3
  • Android从零开始搭建MVVM架构(3)——ViewModel

    Android从零开始搭建MVVM架构(3)——ViewModelViewModel类是被设计用来以可感知生命周期的方式存储和管理UI相关数据,ViewModel中数据会一直存活即使activityconfiguration发生变化。ViewModel有什么优势?1.数据持久化activity在销毁重建时,之前我们可以用activity的onSaveInstanceState()机制保存和恢复数据,但缺点很明显,onSaveInstanceS…

    2022年6月17日
    28
  • Struts2拦截器-abstractInterceptor

    Struts2拦截器-abstractInterceptor通过继承AbstractInterceptor类,重写intercept方法,实现拦截器;需要在Struts2中初始化需要放行的action名称具体流程:1.新建Struts2项目(MyEclipse自动配置Struts2环境)2.新建页面(index.jsp)3.新建页面(login.jsp)4.新建实体类(UserInfo)5.新建action类(B…

    2022年5月15日
    43
  • 除了p站还有哪些站_p站以外的

    除了p站还有哪些站_p站以外的说p站,估计不知道的人已经很少了,不过今天搜罗君要说是,除了p站还有哪些站?我盲猜,应该很多人思考过这个问题了~咱们按照英文字母顺序ABCD···XYZ来说1.A站AcFun,中国第…

    2022年9月25日
    4
  • hive的存储类型_4.2数据类型

    hive的存储类型_4.2数据类型了解Hive数据类型,是Hive编程的基础。使用hive建表,首先要明白hive常用的数据类型有哪些,可以存储哪些类型的数据。其实Hive支持关系型数据库中的大多数基本数据类型,且同时支持关系型数据库中少见的3种集合数类型(STRUCT,MAP,ARRAY)。然而学习技术最好的方式之一就是去查看官方文档。Hive关于数据类型官网地址:Hive官网关于数据类型的介绍…

    2022年9月21日
    2

发表回复

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

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