当前位置: 首页 > news >正文

JVM运行时数据区(内存模型)

Java程序执行过程:

在这里插入图片描述
如上图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件。加载完毕之后,交由JVM执行引擎执行。

在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。因此,在Java中我们常常说到的内存管理就是针对这段空间进行管理(如何分配和回收内存空间)。

内存模型(Java Memory Model,简称 JMM)

JDK1.6:
Java内存模型JDK1.6
JDK1.8:
JVM内存模型1.8
线程私有的:

  • 程序计数器
  • 虚拟机栈
  • 本地方法栈

线程共享的:

  • 方法区

程序计数器:
程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指令器,字节码解释器⼯作时通过改变这个计数器的值来选取下⼀条需要执⾏的字节码指令,分⽀、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完成。

另外为了线程切换后能恢复到正确的执⾏位置,每条线程都需要有⼀个独⽴的程序计数器,各线程之间计数器互不影响,独⽴存储,我们称这类内存区域为“线程私有”的内存。

从上⾯的介绍中我们知道程序计数器主要有两个作⽤:

  • 字节码解释器通过程序计数器来依次读取指令,从而实现代码的流程控制,顺序、选择、循环、异常。
  • 在多线程的情况下,程序计数器用于记录当前线程所执行的位置。从而线程切换回来的时候能够知道上次线程执行到哪个位置了。

注意:程序计数器是唯⼀⼀个不会出现 OutOfMemoryError 的内存区域,它的⽣命周期随着线程的创建⽽创建,随着线程的结束⽽死亡。

Java 虚拟机栈
与程序计数器⼀样,Java虚拟机栈也是线程私有的,它的⽣命周期和线程相同,描述的是 Java ⽅法执⾏的内存模型,每次⽅法调⽤的数据都是通过栈传递的。

Java 内存可以粗糙的区分为堆内存(Heap)和栈内存(Stack),其中栈就是现在说的虚拟机栈,或者说是虚拟机栈中局部变量表部分。 (实际上,Java虚拟机栈是有一个个栈帧组成,每个栈帧都有局部变量表、操作数栈、动态链接、方法出口)
在这里插入图片描述
局部变量表:顾名思义,想必不用解释大家应该明白它的作用了吧。就是用来存储方法中的局部变量(包括在方法中声明的非静态变量以及函数形参)。对于基本数据类型的变量,则直接存储它的值,对于引用类型的变量,则存的是指向对象的引用。局部变量表的大小在编译器就可以确定其大小了,因此在程序执行期间局部变量表的大小是不会改变的。

操作数栈:想必学过数据结构中的栈的朋友想必对表达式求值问题不会陌生,栈最典型的一个应用就是用来对表达式求值。想想一个线程执行方法的过程中,实际上就是不断执行语句的过程,而归根到底就是进行计算的过程。因此可以这么说,程序中的所有计算过程都是在借助于操作数栈来完成的。

指向运行时常量池的引用:因为在方法执行的过程中有可能需要用到类中的常量,所以必须要有一个引用指向运行时常量。

方法返回地址,当一个方法执行完毕之后,要返回之前调用它的地方,因此在栈帧中必须保存一个方法返回地址。

由于每个线程正在执行的方法可能不同,因此每个线程都会有一个自己的Java栈,互不干扰。
  
Java 虚拟机栈会出现两种异常:StackOverFlowError 和 OutOfMemoryError

  • StackOverFlowError:若Java虚拟机的内存大小不允许动态扩展,当线程请求栈的深度超过Java虚拟机栈的最大深度,就会抛出StackOverFlowError。

  • OutOfMemoryError:若Java虚拟机的内存大小允许动态扩展,当线程请求栈内存用完了,无法动态扩展了 ,就会抛出OutOfMemoryError。

本地方法栈
虚拟机栈为虚拟机执⾏ Java ⽅法 (也就是字节码)服务,⽽本地⽅法栈则为虚拟机使⽤到的 Native ⽅法服务。


Java虚拟机所管理的内存中最大的一块,Java中所有线程共享的一块内存区域,在虚拟机启东时创建,此内存区域的唯⼀⽬的就是存放对象实例,⼏乎所有的对象实例以及数组都在这⾥分配内存。
Java 堆是垃圾回收的主要区域,因此也被称为GC堆(Garbage Collected Heap)。

方法区
方法区在JVM中也是一个非常重要的区域,它与堆一样,是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

在Class文件中除了类的字段、方法、接口等描述信息外,还有一项信息是常量池,用来存储编译期间生成的字面量和符号引用。

JDK 1.8 的时候,方法区(hotspot的永久代)被彻底移除了,取而代之的是元空间,元空间使用的是直接内存。

在这里插入图片描述
运行时常量池
在这里插入图片描述

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

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

命令提示符

CMD 打开CMD方式 开始,Windows 系统,命令提示符(以管理员身份运行)WIndowsR,cmd文件夹下,Shift鼠标右键,在此处打开Powershell窗口资源管理器地址栏,cmd 常用DOS命令 切换盘符&a…...

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

最开始面的头条游戏中台,当时是第一次面试,没有经验,导致算法题虽然有思路,但是没有写出最优解,直接挂了。后来又被捞起来,因为此时已有阿里的offer,所以胆子也大起来了,收拾心情开始…...

[前端学习]ES6进阶学习

async/await EventLoop(同步和异步) API接口案例 总结...

Educational Codeforces Round 111 (Rated for Div. 2)A,B

A. Find The Array 题意: 一个序列满足以下条件就算合法的 1.ai 为1 2.ai不为1,那么ai - 1,和ai - 2至少存在一个 现给定一个序列的和,问符合条件的序列最短长度是多少? 思路: 序列中一定包含1 那么就可以由1进行构造 想要长度…...

springBoot 一键启动多个服务

我们启动springboot服务时经常一个一个去启动,这样操作显然是非常麻烦的,那么怎样让他一键启动多个服务呢? 第一步:打开设置 第二步:选择Compound 第三步:选择你要启动的服务 第四步:点击就可以一键启动了...

Linux基本命令

文章目录第一章Linux基础一、基本命令1.ls命令2.cd命令3.文件操作二、用户解读1.用户权限三、linux的基本操作1.软件介绍2.用户操作3.组3.1权限控制4.文件权限控制4.1权限设置5.vim的使用——一开始是命令模式6.寄存器7.find命令格式8.管道符—— |xargs9.grep命令第一章Linux基…...

python数据类型的性能分析

python数据类型的性能分析 本文主要对Python两种内置数据类型list 和 dict上各种操作的大O数量级进行分析 list与dict的比较 list类型各种操作(interface)的实现方 法有很多,如何选择具体哪种实现方法? 总的方案就是&#xff0…...

docker+k8s 报错

dockerk8s报错 问题点:docker容器中或者k8s的pod中执行systemctl相关后台服务 报错信息:Failed to get D-Bus connection: Operation not permitted解决办法 docker:运行容器添加参数–privilegedtrue /sbin/init docker run -tid --name…...

Redis集群的搭建和Redis的使用

Redis集群的搭建和Redis的使用 一.Redis的简介和用途 简介 Redis是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行…...

51单片机入门之按键

对于单片机,单片机上电后默认为高电平,所以对于按键,按下去之后变为低电平(因为按键接地了),未按下去则为高电平,而因为单片机不仅可以改变引脚电平,也可以读取引脚电平,…...

刚换了Mac本这些快捷键你知道吗?

Mac中主要有四个修饰键,分别是Command,Control,Option和Shift。 这四个键分别有自己的图案,他们经常出现在Mac应用程序中的菜单栏里,方便你随时学习新的快捷键。 MAC 键盘快捷键符号图例 keyboard-shortcuts-symbol-l…...

秃头程序员必备Java面试手册!带你跳槽涨薪走上人生巅峰,迎娶白富美

都说程序员工资高、待遇好,改变无数程序员职业生涯的金九银十快来了,你的小目标是什么 30K、40K,还是 16 新的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的奖励 Offer 并不算…...

Coin Change(C++零钱兑换)

&#xff08;1&#xff09;dp&#xff0c;完全平方数类似 class Solution { public:int coinChange(vector<int>& coins, int amount) {int maxsamount1;int ncoins.size();vector<int> v(amount1,maxs);v[0]0;for(int i1;i<amount1;i) {for(int j0;j<n…...

国基北盛—云计算私有云iaas(2.4)平台搭建

1.基本环境配置详情&#xff1a; 2.虚拟机配置&#xff1a; Controller&#xff1a; 内存 6G 处理器4个 硬盘&#xff08;sda&#xff09;100G 网卡1&#xff08;仅主机192.168.100.10&#xff09; 网卡2&#xff08;NAT 192.168.200.10&#xff09; Compute&#xff1a; 内…...

rsync+sersync实现两台web服务器的实时同步

rsyncsersync实现两台web服务器的实时同步一.环境准备主服务器:从服务器:二.分别安装配置rsync,并测试手动免密备份这里大概讲一下rsync的工作方式和原理从服务器(备份端):主服务器(数据端)三.sersync的安装和配置主web端(数据端)从web服务器(备份端)附件--编辑监控脚本主服务器…...

C++中指针前还加是什么意思

C中指针前还加&是什么意思 区分使用位置&#xff0c;有两种可能&#xff1a; 1 在定义时使用&#xff0c;如 int *a; int * &p a; 这种是C中的引用&#xff0c;p本身不占用内存空间&#xff0c;只是a的一个别名&#xff0c;对p的访问完全等同于对a的访问。 2 在非定义…...

Android FileProvider 应用间共享媒体资源

先参考以下两个文档&#xff1a; 官网介绍&#xff1a;https://developer.android.google.cn/training/data-storage/use-cases TX 介绍&#xff1a;https://developers.weixin.qq.com/community/develop/doc/0004886026c1a8402d2a040ee5b401 然后基于以上的文档做一个例子介…...

CSS 基础教程:CSS 语法

CSS 语法 CSS 规则集&#xff08;rule-set&#xff09;由选择器和声明块组成&#xff1a; 选择器指向您需要设置样式的 HTML 元素。声明块包含一条或多条用分号分隔的声明。每条声明都包含一个 CSS 属性名称和一个值&#xff0c;以冒号分隔。多条 CSS 声明用分号分隔&#xff0…...

如何快速搭建自己的人脸识别系统

文章目录前言一、原理介绍1.mtcnnP-Net(Proposal Network)R-Net&#xff08;Refine Network&#xff09;O-Net (Output Network)2. facenetSVM(Support Vector Machine)二、人脸识别实现1.准备工作引入mtcnn下载facenet的权重文件&#xff1a;安装skleran2.训练和预测数据准备训…...

2021年5月程序员工资统计,属实惨不忍睹…你拖后腿了吗?

2021年5月全国招收程序员429056人。2021年5月全国程序员平均工资14926元&#xff0c;工资中位数13000元&#xff0c;其中96%的人的工资介于1750元到75000元。 城市 南京的工资已经连续两个月超过广州了&#xff0c;苏州也快赶上来了。 推荐算法工程师才是最赚钱的&#xff0c;…...

7-图像分割

图像分割&#xff0c;其实就是像素级别的分类 目标检测的是object级别的&#xff0c;不包含背景 图像分类-语义分割把图片的里面的像素进行划分 包含背景 目标检测-实例分割&#xff0c;边框轮廓划分起来 不包含背景 全景分割 语义分割和实例分割结合 3 应用 数据集和评价…...

RBCADS 滚动轴承计算机辅助设计系统 7A单列圆锥滚子轴承公制和英制计算机辅助设计软件

[三维滚动轴承CAD系统RBCADS ]是专门用于滚动轴承产品设计的计算机软件。使用该系列软件可以快速设计出绝大多数结构的轴承产品&#xff0c;对于提高企业对市场的快速反应能力&#xff0c;提高轴承产品的设计效率和质量&#xff0c;减少设计错误将发挥积极的作用。目前轴承行业…...

使用idea创建JavaWeb项目

使用idea创建JavaWeb项目 【第一步】 File---New---Project 【第二步】 选择Java Enterprise版本&#xff0c;然后配置tomcat 注意&#xff1a;这里关联的tomcat home指的是tomcat的解压目录&#xff08;bin目录的上一级目录&#xff09;&#xff1b; 【第三步】 选择使用模板…...

RabbitMQ快速初始化安装图文详细步骤

RabbitMQ 是一个流行的开源消息队列系统。用于在分布式系统中存储转发消息&#xff0c;在易用性、扩展性、高可用性等方面表现不俗。 小九今天为大家带来RabbitMQ的快速初始化安装图文详细步骤~希望能够帮到大家&#xff01; 初始化安装 常规的安装&#xff0c;需要经过前期下…...

Filecoin减产即将来临IPFS黄金时间你抓住了么?

按照Filecoin官方之前发布的信息&#xff0c;Filecoin首次产量下降时间段是2021年4月十五号&#xff0c;包括SAFT,基金会&#xff0c;团队和生态的释放&#xff0c;4月十五号SAFT半年期所有线性释放结束&#xff0c;单天生产降低43.2%,也就是过后流动到市场的Filecoin将每日降低…...

druid-0.21.1基础功能演示

首页 搭建成功之后&#xff0c;首页如下图所示 Druid支持多种数据导入方式&#xff1a; UI界面&#xff0c;根据步骤和提示&#xff0c;一步步执行即可UI界面&#xff0c;提交json格式的task文件本地curl命令提交json格式的task文件Druid家目录下&#xff0c;执行自带的post…...

常见各类算法

冒泡&#xff1a; 1、依次比较相邻的元素&#xff0c;如果第一个比第二个大&#xff0c;则交换位置&#xff1b; 2、从第一个交换到最后一个时&#xff0c;最后的元素一定是最大的&#xff1b; 3、然后对所有的元素都执行此操作O(n^2)快排&#xff1a; 1、选择一个基准&#…...

[前端学习]ES6进阶学习

async/await EventLoop(同步和异步) API接口案例 总结...

--fatal:Unable to create“.../.git/index.lock“ 的错误

chmod -R 777 开权限...

Windows用户界面中的“睫毛膏“

Windows操作系统的用户界面的”外观”&#xff0c;实际上&#xff0c;也经历过一段时尚周期。 起初&#xff0c;还是在Windows 1.0的时代&#xff0c;用户界面是非常扁平的&#xff0c;因为那个时候屏幕分辨率十分低&#xff0c;而色彩深度几乎还不存在。如果你的系统是16色的…...

dbc2000 注册机|dbc2000 注册码注册机下载

点击下载来源&#xff1a;dbc2000 注册机 dbc2000 注册机是同名源程序软件的注册机软件&#xff0c;该源程序软件是一款应用于数据库搭建以及数据写入的数据库架设工具&#xff0c;它拥有强大的数据写入功能&#xff0c;在作为应用程序使用时&#xff0c;它不仅可以充当数据属性…...

秋招面经第八弹:网易二面-数据开发工程师

秋招第八弹&#xff1a;网易二面-数据开发工程师 写在最前&#xff1a;秋招以来一直在冲&#xff0c;因为事情比较多&#xff0c;对于笔试面试一直没有复盘&#xff0c;现在靠仅存的记忆把面试的一些问题记录下来&#xff0c;尽可能记录出能回忆到的问题&#xff0c;但可能记的…...

安卓课程格子APP

https://download.csdn.net/download/weixin_57836618/73810452 功能演示&#xff1a; 查看所有课程 点击主页面空白处即可添加课程 添加课程之后查看课程 查看双周课程 查看单周课程 6.查看课程详情...

强化学习——格子世界

强化学习——格子世界 项目源码地址&#xff1a;https://gitee.com/infiniteStars/machine-learning-experiment 1. 实验内容 2. 实验代码 import numpy as np import matplotlib.pyplot as plt from matplotlib.table import Table from xml.dom.minidom import Document #手…...

华为机试 - 跳格子游戏

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 地上共有N个格子&#xff0c;你需要跳完地上所有的格子&#xff0c;但是格子间是有强依赖关系的&#xff0c;跳完前一个格子后&#xff0c;后续的格子才会被开启&#xff0c;格子间的依赖关系由多组st…...

php 爬课程表信息,Ruby爬取教务系统生成课程表

我为什么要虐自己最近觉得课程格子广告越来越多&#xff0c;乱七八糟的东西越来越多&#xff0c;完全失去了一开始的存在价值&#xff0c;并且没有电脑端app&#xff0c;想查看课程必须拿出手机&#xff0c;而我使用电脑频率要比手机高&#xff0c;所以才有了折腾的动力。于是我…...

android 课程表 ui,UICollectionViewLayout实现课程表布局

因为项目中有课程表的相关模块&#xff0c;第一时间想到用UICollectionView。然而后期的需求越来越复杂&#xff0c;每个格子需要展示的内容越来越多&#xff0c;所以不得不寻找合适的解决方案。最后发现自定义UICollectionViewLayout可以实现我的需求。先放效果图&#xff1a;…...

Android自定义View课程表,Android 自定义View课程表表格

自己闲下来时间写的一个课表控件使用的自定义LinearLayout 里面View都是用代码实现的 最终效果如下图 写的可能有问题希望多多指点创建一个自定义LinearLayout 控件用来装载课程的信息和课程的周数 和节数大概的布局三这样的根据上面的看来觉得总体布局我分了两个 上面的星期是…...

java课程设计设计_java课程设计

1. 团队课程设计博客链接https://www.cnblogs.com/choco1ate/p/12172223.html2.本组课题及本人任务本组课题&#xff1a;泡泡堂(炸弹人)游戏本人任务&#xff1a;Box类(游戏地图中的每个方格)Bomb类(游戏过程中的)游戏玩家输赢信息的文件储存3.需求分析Box类&#xff1a;该类为…...

《课程格子》的一个笔试题目

题目如下&#xff0c;感觉很适合喜欢琢磨的程序员&#xff0c;也是考验你编码风格的时候。 Lets make a tower defense game&#xff08;塔防游戏):1. You have 1 tower, with H health and D dps(damage per second).2. There are n attackers, each with h_i health and d_i …...

Android仿照超级课程表 or 课程格子 一键提取课表功能(方正系统)

参考文章http://blog.csdn.net/sbsujjbcy ,本文仿照‘ 安卓弟 提供的android 项目实战——打造超级课程表一键提取课表功能文章&#xff0c;对他的代码进行了修改和补充&#xff0c;为什么要修改呢&#xff1f;原因是安卓弟的那个源码版本过于老旧&#xff0c;很多方法已经过…...

计算机专业毕设论文题目大全(一)

这一期为大家整理了计算机专业常见的论文题目&#xff0c;需要参考资料的同学可以直接点击后面链接下载&#xff0c;没有链接的可以添加微信biyezhan007来获取资源。 序号题目链接1"XXX"垃圾分类查询APP2“共享停车”微信小程序的设计与实现3“馆家”体育场馆管理系统…...

最新仿山楂岛留言源码+公众号吸粉/短视频引流神器

正文: App.php中替换数据库名称和密码&#xff0c;导入数据库.sql到数据库&#xff0c;抖音之前很火的山楂岛&#xff0c;我用PHP简单的仿写了一个&#xff0c;代码简单&#xff0c;就一个留言功能&#xff0c;搭建简单小白也可以搭建&#xff0c;喜欢的朋友可以自行搭建测试。…...

新版仿山楂岛留言PHP源码+短视频/公众号吸粉引流

正文: App.php中替换数据库名称和密码&#xff0c;导入数据库.sql到数据库&#xff0c;抖音之前很火的山楂岛&#xff0c;我用PHP简单的仿写了一个&#xff0c;代码简单&#xff0c;就一个留言功能&#xff0c;搭建简单小白也可以搭建&#xff0c;喜欢的朋友可以自行搭建测试。…...

仿山楂岛留言源码/公众号吸粉/短视频引流神器

php仿山楂岛留言本源码 最近抖音非常火的山楂岛&#xff0c;用php简单的仿了一个。代码简单&#xff0c;就一个留言功能&#xff0c;搭建简单小白也可以搭建&#xff0c;喜欢的朋友可以自行搭建测试 源码下载&#xff1a; 仿山楂岛留言源码/公众号吸粉/短视频引流神器-小程序…...

公众号吸粉

品牌活动推广就是加个超链接到外网,别的和上面的公众号推广类似...

分享我用H5打造微信公众号吸粉引流的恶搞方法

Hello 大家好&#xff01;又要跟大家见面了&#xff0c;上次实在太无聊了&#xff0c;就在博客园跟大家讲述了本人职业生涯以来的一些工作经历&#xff0c;同时也分享了一些工作上的心得&#xff0c;没想到引起那么多朋友的共鸣&#xff0c;也鼓舞了很多初入职场的朋友和有相同…...

php订阅号如何吸粉,公众号如何快速吸粉,一周内吸粉7000+的6个技巧

我个人从17年开始主要运营公众号&#xff0c;当时刚刚毕业半年&#xff0c;辞职全职去操作&#xff0c;那段时间倒逼自己快速成长&#xff0c;从公众号涨粉&#xff0c;运营维护&#xff0c;包括后期变现&#xff0c;到公众号涨粉的一些工具&#xff0c;一些第三方平台都详细去…...

照相馆、摄影工作室如何利用选片和底片下载来做微信公众号吸粉

照相馆、各类摄影工作室如果有自己的微信公众号并有预约下单功能&#xff0c;下单人肯定已经是粉丝了&#xff0c;但选片人和下载底片的人可能不是下单人&#xff0c;比如闺蜜照、企业团体照、幼儿园活动照等&#xff0c;系统设计上可以让选片人和底片下载者必须成为粉丝才可选…...

微信营销十一(微信公众号吸粉技巧)

首先&#xff0c;我们来看一下如何来获得首批粉丝&#xff0c; 首批粉丝&#xff0c;我们讲万事开头难&#xff0c;首批粉丝也一样&#xff0c;你想获得的话可能相对来说就会复杂一点。 我们获得首批粉丝方式&#xff0c;有三种&#xff0c;一个&#xff0c;就是导入老客户&…...