Java虚拟机组成详解

一、jvm的主要组成部分

  1. 类加载器(ClassLoader)
  2. 运行时数据区(Runtime Data Area)
  3. 执行引擎(Execution Engine)
  4. 本地库接口(Native Interface)

接下来我们来看以上4个主要组成部分的用途。

二、jvm组成部分的用途

程序在执行之前先要把java代码转换成字节码(class文件),jvm首先需要把字节码通过一定的方式 类加载器(ClassLoader) 把文件加载到内存中 运行时数据区(Runtime Data Area) ,而字节码文件是jvm的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器 执行引擎(Execution Engine) 将字节码翻译成底层系统指令再交由CPU去执行,而这个过程中需要调用其他语言的接口 本地库接口(Native Interface) 来实现整个程序的功能,这就是这4个主要组成部分的职责与功能。

而我们通常所说的jvm组成指的是运行时数据区(Runtime Data Area),因为通常需要程序员调试分析的区域就是“运行时数据区”,或者更具体的来说就是“运行时数据区”里面的Heap(堆)模块,那接下来我们来看运行时数据区(Runtime Data Area)是由哪些模块组成的。

三、运行时数据区

jvm的运行时数据区,不同虚拟机实现可能略微有所不同,但都会遵从Java虚拟机规范,Java 8 虚拟机规范规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域:

  1. 程序计数器(Program Counter Register)
  2. Java虚拟机栈(Java Virtual Machine Stacks)
  3. 本地方法栈(Native Method Stack)
  4. Java堆(Java Heap)
  5. 方法区(Methed Area)

接下来我们分别介绍每个区域的用途。

3.1 程序计数器

程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解析器的工作是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

特性:内存私有

由于jvm的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,也就是任何时刻,一个处理器(或者说一个内核)都只会执行一条线程中的指令。因此为了线程切换后能恢复到正确的执行位置,每个线程都有独立的程序计数器。

异常规定:无

如果线程正在执行Java中的方法,程序计数器记录的就是正在执行虚拟机字节码指令的地址,如果是Native方法,这个计数器就为空(undefined),因此该内存区域是唯一一个在Java虚拟机规范中没有规定OutOfMemoryError的区域。

3.2 Java虚拟机栈

Java虚拟机栈(Java Virtual Machine Stacks)描述的是Java方法执行的内存模型,每个方法在执行的同时都会创建一个线帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息,每个方法从调用直至执行完成的过程,都对应着一个线帧在虚拟机栈中入栈到出栈的过程。

特性:内存私有,它的生命周期和线程相同。

异常规定:StackOverflowError、OutOfMemoryError

1、如果线程请求的栈深度大于虚拟机所允许的栈深度就会抛出StackOverflowError异常。

2、如果虚拟机是可以动态扩展的,如果扩展时无法申请到足够的内存就会抛出OutOfMemoryError异常。

3.3 本地方法栈

本地方法栈(Native Method Stack)与虚拟机栈的作用是一样的,只不过虚拟机栈是服务Java方法的,而本地方法栈是为虚拟机调用Native方法服务的。

在Java虚拟机规范中对于本地方法栈没有特殊的要求,虚拟机可以自由的实现它,因此在Sun HotSpot虚拟机直接把本地方法栈和虚拟机栈合二为一了。

特性和异常: 同虚拟机栈,请参考3.2的知识点。

3.4 Java堆

Java堆(Java Heap)是Java虚拟机中内存最大的一块,是被所有线程共享的,在虚拟机启动时候创建,Java堆唯一的目的就是存放对象实例,几乎所有的对象实例都在这里分配内存,随着JIT编译器的发展和逃逸分析技术的逐渐成熟,栈上分配、标量替换优化的技术将会导致一些微妙的变化,所有的对象都分配在堆上渐渐变得不那么“绝对”了。

特性:内存共享

异常规定:OutOfMemoryError

如果在堆中没有内存完成实例分配,并且堆不可以再扩展时,将会抛出OutOfMemoryError。

Java虚拟机规范规定,Java堆可以处在物理上不连续的内存空间中,只要逻辑上连续即可,就像我们的磁盘空间一样。在实现上也可以是固定大小的,也可以是可扩展的,不过当前主流的虚拟机都是可扩展的,通过-Xmx和-Xms控制。

3.5 方法区

方法区(Methed Area)用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。

误区:方法区不等于永生代

很多人原因把方法区称作“永久代”(Permanent Generation),本质上两者并不等价,只是HotSpot虚拟机垃圾回收器团队把GC分代收集扩展到了方法区,或者说是用来永久代来实现方法区而已,这样能省去专门为方法区编写内存管理的代码,但是在Jdk8也移除了“永久代”,使用Native Memory来实现方法区。

特性:内存共享

异常规定:OutOfMemoryError

当方法无法满足内存分配需求时会抛出OutOfMemoryError异常。

为了让学习变得轻松、高效,今天给大家免费分享一套Java入门教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要资料的欢迎加入学习交流群:9285,05736

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

取消android所有动画,android studio 取消BottomNavigationView的动画等

app:labelVisibilityMode"labeled"布局文件上添加上此句就可以让标签文字也显示出来了,但是缩放动画,还是会存在。那么回到初始化view的activity中BottomNavigationView navView findViewById(R.id.nav_view);//设置选中时的效果navView.setI…

android addtextchangedlistener参数,【Android】关于addTextChangedListener()方法的上机记录...

自己在学习控件的时候,学到关于EditText的addTextChangedListener()方法,想做一个类似发微博限制字数为140那样的功能,以此文记录上机过程中发现的一些问题。在做这个的时候,是第五节课视频刚提到addTextChangedListener()这个方法…

android 开源 数据库,Android开源数据库框架-LitePal的使用

简介LitePal是一款开源的Android数据库框架,采用了关系映射的模式。LitePal在github上的项目地址:github.com/LitePalFram…配置LitePaldependencies {....compile org.litepal.android:core:1.5.1}复制代码在app/src/main 目录下新建目录assets&#xf…

signature=095ed28e83b68620637b3a67436b0f8f,SMB 3.1.1 Encryption in Windows 10

SMB 3.1.1 Encryption in Windows 1009/09/201513 分钟可看完本文内容SMB 3 encryption offers data packet confidentiality and prevents an attacker from both tampering with and eavesdropping on any data packet. Encryption has been enhanced in SMB 3.1.1. The ciph…

鸿蒙系统打通iOS,库克真的做到了!正式官宣确认截胡鸿蒙OS系统:软硬件生态全打通...

【4月25日讯】相信大家都知道,自从苹果正式举办完春季新品发布会以后,很多网友们都纷纷吐槽到“苹果的黑科技就是以换色为本,iPhone12推出紫色版本,而iMac也变成了彩虹色,很好的继承了诺基亚“科技以换壳为本”理念”&…

html标签中的文本框的值,HTML文本框的值分配给div标签的标题

线2:#msdhoni我want-什么,当用户输入一些东西在文本框(以行1)应该成为div的标题(在第2行)点击botton(在第1行)。其实想要用代码中的文本输入替换#msdhoni。jQuery代码我米使用:(请建议在这段代码的变化,使这成为可能)String.proto…

快速了解Java集合框架

1. 简介 JDK1.2 引入了 Java 集合框架,包含一组数据结构。与数组不同,这些数据结构的存储空间会随着元素添加动态增加。其中,一些支持添加重复元素另一些不支持,一些支持 null,一些能自动升序打印元素。 所有这些数据…

html分类页面,CSS网页设计 把HTML标记分类

p、h1、或div等元素常常称为块级元素,这些元素显示为一块内容;Strong,span等元素称为行内元素,它们的内容显示在行中,即“行内框”。(可以使用displayblock将行内元素转换成块元素,displaynone表示生成的元素根本没有框…

html点击图片产生事件,jquery – 图像单击HTML5 Canvas中的事件

我有一个HTML5画布,我在其中添加了一个图像,我想调用图像的点击事件,但事件不会触发.我正在写一个HTML代码和jqmobile的一些代码This text is displayed if your browser does not shown.$(function () {var ctx document.getElementById("canvas1").getContext(&qu…

html代码里面换图片不显示不出来了,微擎 Ueditor 百度编辑器 替换图片不显示问题...

问题:最近在使用微擎添加公众号平台文章时,上传图片可以显示,但是点击 html(编辑器的按钮,可以显示html代码) 时出现图片不显示问题。我是用的135编辑器挑选的图文模板,我替换完模板中的图片后,图片的链接失效&#xf…

找通项公式在线计算机,在线硬盘分区计算器工具

一、什么是分区?分区从实质上说就是对硬盘的一种格式化。当我们创建分区时,就已经设置好了硬盘的各项物理参数,指定了硬盘主引导记录(即Master Boot Record,一般简称为MBR)和引导记录备份的存放位置。而对于文件系统以及其他操作系…

湖南大学计算机网络实验,湖南大学《计算机网络》实验报告

实验一应用协议与数据包分析实验(使用Wireshark)一、实验目的通过本实验,熟练掌握Wireshark的操作和使用,学习对HTTP协议进行分析。二、实验内容1.HTTP 协议简介HTTP 是超文本传输协议(Hyper Text Transfer Protocol)的缩写,用于W…

html中dl标签和ul标签,html中dl,dt,dd,ul,li,ol标签区别和使用

html中dl,dt,dd,ul,li,ol标签区别和使用时间:2013-04-12 21:48 来源:未知 | 作者:易享学习网| 本文已影响 人ul: unordered listsol: ordered listsli: Listsol 有序列表:………………表现为:1……2……3……ul 无序列表,表现为li前面是大圆点…

国家开放计算机应用基础模块1答案,完整word版,《国家开放大学学习指南》计算机应用基础网上作业答案(完整版)...

作业1(本次作业覆盖“模块1 Windows 7 操作系统”的内容,请在学完模块1后完成本次作业,要求第8周内完成。满分为40分,其中基础知识部分10分,Windows 7部分20分,网络部分10分。单选题50道、填空题50道)基础知识选择题(共…

webview 本地 html空白,WKWebView加载本地html遇到的坑与解决办法

1、字体变小解决办法Swiftlet headerString ""self.wkwebview.loadHTMLString(headerString.appending(html), baseURL: nil)Objective-CNSString *headerString "";[strongSelf.contentWebView loadHTMLString:[headerString stringByAppendingString:m…

偷用计算机作文,偷玩电脑作文5篇

偷玩电脑作文5篇篇一:偷玩电脑的滋味星期天,我在家里看电视,妈妈很晚才回来,我只好在家等,看了一会,电视节目没了,我把电视关掉,看了会书消磨时间,我又写了会作业&#x…

中科院计算机学院王宏,王宏-中国科学院大学-UCAS

发表论文(1) SIL verification for SRS with diverse redundancy based on system degradation using reliability block diagram, Reliability Engineering and System Safety, 2017, 第 2 作者(2) New considerations for SIL verification of functional safety fieldbus co…

钢铁厂计算机相关岗位需要倒班吗,钢铁厂工人倒班的三个阶段,请对号入座!...

原标题:钢铁厂工人倒班的三个阶段,请对号入座!刚开始钢铁厂倒班工作,感觉倒班好,夜班有啥,通宵可以感受夜的宁静,深夜闲暇之余还可以仰望星空,思考人生,白天自由时间多&a…

计算机文化基础B卷期末,《计算机文化基础》上机试卷B

课程代码: 座位号:新疆大学2008- 2009 学年度第一学期期末考试《计算机文化基础》上机试卷姓名: 学号: 专业:学院: 班级:2008年 12月注意事项:在试卷上必须注明学号、姓名否则成绩以“零”分计算完成以下各题后,将应用程序窗口最小…

win7查看 本地计算机策略,win7系统本地组策略编辑器打不开怎么办

本地组策略编辑器是win7系统的管理控制台,通过本地组策略编辑器可以禁止通过本地组策略、禁止对某些任务使用脚本等设置。有些win7 64位系统的用户发现,本地组组策略编辑器打不开了,这是怎么回事呢?会出现这种情况很有可能是控制台…