JVM内存区域划分

news2024/11/16 21:35:55

哈喽,又是好久不见呀,今天主要要给大家分享的是JVM的内存区域划分,这个就是纯纯的八股文了呦,但是我依旧还是会尽我最大的努力给友友讲清楚的,快来看看吧.

 


目录

1.JVM快速扫盲

2.JDK、JRE、JVM的关系

3.JVM内存区域划分

3.1 堆

3.2 java虚拟机栈

3.3 本地方法栈

3.4 程序计数器

3.5 方法区


1.JVM快速扫盲

JVM全称Java Virtual Machine,也称java虚拟机。那什么是虚拟机呢,相信大家应该多多少少都有听说过。就是通过软件来模拟的一个具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。简单粗暴的可以理解为可以在上面进行一些操作的一个计算机,但是这个计算机是虚拟的、不存在。知道了虚拟机,那java虚拟机又是什么呢?

java虚拟机是一种程序虚拟机,java虚拟机是可运行的java程序的假想计算机。java虚拟机有自己假想的硬件,如处理器,寄存器,堆,栈等,还有相应的指令系统

学过java的应该都知道,java语言有个特性就是具有可移植性.这就与java虚拟机有着直接的关系。一般高级语言在不同的平台上运行时需要编译成不同的目标代码。但是当引入Java虚拟机之后,java语言只需编译生成能在java虚拟机上运行的目标代码(字节码),在各种不同的平台下,引入java虚拟机,java代码就可以不加任何修改编译运行起来。

java虚拟机规范定义了一个抽象的,虚拟的机器。这个规范描述了一个指令集,一组寄存器,一个堆,一个栈,一个垃圾堆和一个方法区。一旦一个java虚拟机在给定的平台上运行,则任何一个java程序的字节码文件都可以在通过java虚拟机在此平台上运行起来。

目前我们知道,运行一个java程序时,需要先通过一个叫javac的编译器,将代码编译成class文件,最终加载到JVM中,将其解释成各个平台都能识别的机器码,最终实现跨平台。


2.JDK、JRE、JVM的关系

JDK(Java Development Kit)即java开发工具包,用于java程序的开发,针对于开发者。是整个java的核心,包含了java运行环境jre、Java基础的类库、jvm实现标准、java核心类库等

java基础类库就是Java API,包括rt.java.Java API就是Java应用程序接口,比如基本的语言结构,I/O,网络等,开发者可以直接调用.

JRE(Java Runtime Environment):即java运行环境,不能编译(java源文件的编译在jdk中),只能运行.class文件,针对于用户.

JRE包含了一个JVM(java虚拟机),java核心类库和其支持的一些文件.于jdk不同,jre不包含开发工具--编译器,调试器和其他工具.

一个java程序的运行必少不了jre,编译后的java程序必须要在jre上才能运行.如果想要运行一个已经编译好的java程序,只需要在计算机中安装jre即可.

JVM(Java Virtual Machine):将字节码(拓展名为.class)文件解释成各系统能识别的机器指令.

以下是三者之间的包含关系:

JVM是java程序能实现跨平台的最核心部分.java程序编译成字节码文件(.class)之后,字节码文件不直接与操作系统打交道,而是在JVM上执行,JVM会将该文件解释成系统能识别的机器指令.JVM再与操作系统进行交互(JVM是运行在操作系统上面的).

"java一次编译到处运行":通过JVM屏蔽底层系统(Windows,Linux,Mac等)的差异来实现的.java程序被编译之后,形成字节码文件,该文件运行在jvm上,jvm运行在操作系统上,jvm内部做了不同操作系统的适配,所以不同的操作系统不会影响java程序输出结果的一致性.


3.JVM内存区域划分

JVM本质上就是一个java进程。当JVM运行时,就会从操作系统那边申请一大块内存,这一大块内存被分为五部分,分别有着自己的作用。这五大部分如下图:

3.1 堆

堆存放的就是new的对象(包括对象里面的成员方法)同时也是这五部分中占地面积最大的区域。堆是被所用线程共用的一块内存,在虚拟机启动时创建,此内存就是用来存放java对象实例的,几乎所有的java对象实例都存放在对堆上。

3.2 java虚拟机栈

java虚拟机栈中存放在的是方法之间的调用关系和局部变量。java虚拟机栈是线程私有的,生命周期与线程相同。每个方法在执行时,就会java虚拟机栈中为其分配一块栈帧,栈帧中存放的就是每个方法的局部变量表,操作栈,动态链接,方法返回出口等信息每一个方法从执行到结束就是一个对应着一个栈帧在java虚拟机中入栈和出栈的过程

局部变量表:用来存储局部变量(包括方法中的非静态变量和方法形参)。对于基本数据类型,直接存值;对于引用数据类型,存其对象的引用。

动态链接:每一个栈帧内部都包含一个运行时常量池中该栈帧所属方法的引用。包含这个引用就是为了支持当前方法能够实现动态链接。有些方法的调用,编译期无法确定,只能在程序运行期间将调用方法的符号引用转为直接引用。

方法返回出口:当一个方法执行结束之后,要返回调用它的地方。这时就需要在栈帧中保存它的返回地址。

3.3 本地方法栈

与java虚拟机栈的管理机制大致相同,也是线程私有的。java虚拟机用来管理java方法的调用;本地方法栈用来管理本地方法(Native)的调用。当某个线程调用一个本地方法时,他就进入一个全新的并且不再受虚拟机的限制。在HotSpot的jvm中将本地方法栈和虚拟机栈合二为一。

本地方法:java程序需要和java环境外的环境交互时,就需要调用本地方法。比如:JVM不是一个完整的系统,它需要操作系统的支持,因此,需要与操作系统交互。通过本地方法,我们可以用Java实现JRE与底层系统的交互。

3.4 程序计数器

占地最小的区域,存储了当前线程下一个要执行的指令地址(即存的就是当前代码执行到哪个指令了).

因为java虚拟机的多线程是通过线程的轮流切换、分配处理机执行时间的方式来实现的,故每一个线程都需要有一个自己独立的程序计数器,负责记录当前线程执行到哪了,以便线程能恢复到原来正确的位置再次执行。

3.5 方法区

方法区里放的是类对象和静态变量我们写的程序是.java文件,后需要被编译成.class文件,然后JVM就会将.class文件加载到内存中,构造成类对象。也就是说就我们写的这个java代码的信息反馈到类对象中了。

类对象中包含了类的名字是什么,继承谁,实现了哪些接口,有什么属性,属性名是什么,类型是什么,访问权限是什么,有什么方法,方法内部的指令是什么,方法名是什么,参数是什么,返回值是什么等等。

在《Java虚拟机规范》中,此区域称之为方法区,而在HotSpot虚拟机的实现中,在JDK7时,此区域称为“永久代”,在JDK8时,此区域称为“云空间”(Metaspace)。


好啦,这部分知识就到这啦,希望看完的友友能有所收获呀,多多看我的博客,我们一起进步呀

 

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

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

相关文章

OpenCV学习-P44 角点检测

OpenCV学习-P44 角点检测角点特征Harris和Shi-Tomas算法Harris角点检测Shi-tomas角点检测角点特征 角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用 Harris和Shi-Tomas算法 Harris角点检测 E最大的点即角点,矩阵M决定了E的取值 im…

信息系统项目管理师高级论文如何准备?

如果有项目经验,可以选一个,整理一下项目背景,内容等,使它符合考试的要求。 没有项目经验,就只能多看范文,总结框架,然后再动手写了。 所以,论文一定要提前准备。 2小时内要完成三…

HTML简单的网页制作期末作业【NBA勒布朗詹姆斯篮球明星】HTML+CSS+JavaScript

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

大一学生作品《前端框架开发技术》 期末网页制作 HTML+CSS+JavaScript 个人主页网页设计实例

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

UML类图

统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 UML从目标系统的不同角度出发,可分为用例图、类图、对象图、状态图、活动图、…

实现一个全局事件总线并发布到NPM

前言 Vue2开发过程中,会碰到非父子组件情况,我们大多数会使用Vue提供的自定义实例来解决这个问题,但在Vue3之后就移除了$on/$off/$once/emit 相关API,不再提供自定义实例,而是推荐使用一些第三方库如mitt、tiny-emitt…

第3关:Client连接及状态

ZooKeeper状态以及状态的转换 一个会话从NOT_CONNECTED状态开始,当客户端初始化后转换成CONNECTTING状态(箭头1)。 当客服端与服务器断开连接,状态转换成CONNECTED状态(箭头2)。 当客服端与服务器断开连接…

基于xsh的vbs脚本的使用(语法)

一. chr(number)含义 chr(number) 对应列表链接:chr码值对应列表大全_conger3400的博客-CSDN博客 常用举例: chr(3):CtrlC/退出等待某个执行命令 chr(4):CtrlD/退出会话 chr(8):del回退删除一个字符 chr(9)&#xff…

Linux网络管理

文章目录 前言 网卡的存储位置(查看网卡) NetworkManager服务 查看网络连接状态 配置网卡参数 先备份网卡配置文件,再修改 查看本机的自动获取的IP 编辑网卡配置文件 重启网络服务并查看IP 另一台机器同样的方法进行网络配置&#x…

网络工程师备考1-2章(续)

一:差错控制 (1)奇偶检验 什么意思呢? 如果我们用 奇校验,就是保证传输过来的数据中的1是奇数,如果不是奇数那么说明传输错误。 (所以会增加一位,保证正确的数据的总的1一定是奇数) (2)海明码 什么是海明距离? 两个码字,例如 0 1 0 0 和 0 0 1 0 可以看到这…

人机界面在石油钻井工程中的应用:如何搭建钻井工程参数监测系统?

一、应用背景 石油钻井工程是石油开采过程中最为关键的一个环节,直接决定着石油开采的质量和经济效益,而钻井工程参数的实时监测、分析处理和存储是保证安全、可靠、高效钻井的重要途径。 随着科学技术的飞速进步,尤其是自动化技术的发展&a…

HTML网页设计制作大作业(div+css)---浩瀚天文 (13页有二级菜单)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | | HTML期末大学生网页设计作业,Web大学生网页 HTML:结构 CSS:样式 在操作方面上运用了html5和css3, 采…

MySQL索引及调优回顾

MySQL索引及调优回顾 1.1 :索引诞生的背景是怎样的? 假如数据库表中只有10条记录,我们可以一条条的进行查询。假如有500万条记录呢,从假如还是一条条去查询可能需要的时间就会比较长,此时索引就诞生了。1.2 &#xf…

SSH Keylogger密码抓取

简介 SSH Keylogger终端切换用户记录用户输入的终端信息可获取密码 主要利用strace系统调试工具获取ssh的读写连接的数据,以达到抓取管理员登陆其他机器的明文密码的作用。 Strace strace命令是一个集诊断、调试、统计于一体的工具,常用来跟踪进程执行时的系统调…

flutter 中最详细的继承,多态,接口讲解

flutter 中最详细的继承,多态,接口讲解前言一、继承(Extends)二、混合 mixins(with)2.1、最简单的mixin2.2、on 关键字,基于某个类型的mixin2.3、多个mixin2.4、mixin 怎么实现多继承三、接口的…

常见简单的排序算法汇总

作者:~小明学编程 文章专栏:Java数据结构 格言:目之所及皆为回忆,心之所想皆为过往 目录 插入排序 原理 代码实现 算法性能分析 希尔排序 引入 原理 代码 算法分析 选择排序 原理 代码 堆排序 原理 代码 算法分析…

pythonUI自动化测试selenium安装使用

pythonUI自动化测试selenium安装使用一、selenium二、安装1. selenium其实虽然称之为工具,但是实际是python中一个库2.安装浏览器3.下载浏览器驱动三、元素定位1.常见的元素定位方式2.打开浏览器3.设置最大行4.设置隐式等待5.打开网页6.点击 登录 按钮7.设置等待8.用…

【javaEE】网络编程套接字

To u&me: 努力经营当下,直至未来明朗 文章目录前言一、网络编程(没时间可以跳过)一)网络编程了解二)相关基本概念二、Socket套接字三、数据报套接字通信(UDP)写一个最简单的UDP版本的客户端…

[附源码]java毕业设计科院垃圾分类系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

高级UI-Canvas(变换技巧,状态保存)

前言 在前面我们把Paint关于UI颜色样式的处理进行了学习, 其实真正高级部分就是三个点,渲染,滤镜,图形组合,而我们图形绘制比较重要的另一个对象Canvas也是需要我们去重点掌握的,那么这次课咱们来进行Canv…