JVM介绍

71fcee8d40dc47bb9cc6a96016cd4541.jpg程序计数器:

 

 

程序计数器属于线程的私有内存区域,记录当前线程的运行位置,以供多线程运行时上下文切换,字节码解释器通过程序计数器的增减来执行顺序分支循环等结构。独立于堆之外,因此程序计数器是唯一不会导致OutOfMemoryError的区域。

 

虚拟机栈:

 

JAVA中说得栈其实就是虚拟机栈,线程私有,每个java方法在调用时会创建一个栈帧,保存局部变量表 操作数栈 动态链接 返回地址 等信息。

 

局部变量表:基本类型以及引用类型,引用类型是指堆中对象的引用。

Stackoverflowerror指的是虚拟机栈不被允许动态扩展大小时,线程请求栈深度超过了虚拟机栈的最大深度

 

OutOfMemoryError是虚拟机栈允许动态扩展大小时,无法申请到内存空间。

 

本地方法栈:同虚拟机栈类似。在Hotspot中合二为一。

 

方法如何调用?

 

每一次方法调用,都会向虚拟机栈压入一个栈帧,而每次return或抛出异常,都会导致栈帧弹出。

 

堆:

 

线程共用,也就是线程不安全。是虚拟机最大的一块内存空间,此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。是垃圾收集器管理的主要区域,因此也被称作GC堆。根据垃圾回收机制,将堆分为新生区、老生区。

 

最容易出现两类OutOfMemoryError,一类是垃圾回收代价太高、另一类是内存不够。

 

静态常量池:以class文件形式保存的常量,在类加载后,变为运行时常量池。

 

方法区(元空间、永久代):

 

线程共用,存放运行时常量池、静态变量、类信息等数据,在Hotspot中的实现之前为永久代,被元空间取代。元空间可以指定初始和最大空间。

 

元空间使用直接内存,若不指定最大空间,则元空间会尽可能使用物理内存,减少内存溢出

 

直接内存:

 

是在虚拟机之外的内存,由NIO类使用native方法分配,然后通过在堆中的一个引用直接内存的buffer访问

 

 

 

对象的创建:

 

虚拟机在遇到new的时候,会首先在方法区中寻找该对象的类信息是否加载,若没有加载,则首先要加载该类。

给对象分配内存,有两种方式。

指针碰撞:堆内存规整时,使用的内存和没使用的内存中间有个边界指针,把该指针往没使用过的内存上移动要分配内存的大小那么长的位置就行。

 

空闲列表:堆内存不规整时,虚拟机维护一个列表记录哪些区域是空闲的,分配的时候在列表上中找一块足够大的,然后更新记录表。

 

给分配的内存空间初始化为0。

执行初始化方法。

 

 

对象的内存布局:

 

对象的内存区域分为:对象头、实例数据、对齐填充。

 

对象头:一部分是对象的运行时数据,hashcode、分代年龄、锁状态等、一部分指向类原始数据。

 

实例数据:对象包含的真正的数据。

 

对齐填充:占位作用,使得对象占用空间为8字节的整数倍。

 

 

 

对象访问定位:

 

句柄:在堆中分配一块句柄池,reference指向这个句柄,句柄包含两个指针,一个指向对象实例数据、一个指向类型数据。

 

直接指针: reference直接指向对象实例。

 

前者:对象的内存空间被移动时只需要更改句柄而不需要更改reference

 

后者:节省了一次寻址。

 

 

 

字符串常量池:

 

对于编译期可确定值的字符串,也就是字符串常量,jvm会将其存入字符串常量池,在堆中。其他常量池在方法区

 

并且拼接得到的字符串也在编译器就存入了常量池.

 

常量折叠:将在编译期内可确定值的常量存入常量池:

 

基本数据类型以及字符串常量

final 修饰的基本数据类型和字符串变量

字符串通过 “+”拼接得到的字符串、基本数据类型之间算数运算(加减乘除)、基本数据类型的位运算(<<、>>、>>> )

因此,要 尽量避免使用new在堆上创建字符串,而使用双引号,可以引入编译器的优化。

 

 

 

String s = new String("abc");这句话创建了几个字符串对象?

 

会创建 1 或 2 个字符串:

 

如果字符串常量池中已存在字符串常量“abc”,则只会在堆空间创建一个字符串常量“abc”。

如果字符串常量池中没有字符串常量“abc”,那么它将首先在字符串常量池中创建,然后在堆空间中创建,因此将创建总共 2 个字符串对象。

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

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

相关文章

大数据深度解析NLP文本摘要技术:定义、应用与PyTorch实战

文章目录 大数据深度解析NLP文本摘要技术&#xff1a;定义、应用与PyTorch实战1. 概述1.1 什么是文本摘要&#xff1f;1.2 为什么需要文本摘要&#xff1f; 2. 发展历程2.1 早期技术2.2 统计方法的崛起2.3 深度学习的应用2.4 文本摘要的演变趋势 3. 主要任务3.1 单文档摘要3.2 …

SLAM算法与工程实践——SLAM基本库的安装与使用(6):g2o优化库(4)构建g2o的边

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址&#xff1a; SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

[原创][R语言]股票分析实战[4]:周级别涨幅趋势的相关性

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

Redis数据库入门学习(下载与安装、常用命令、在Java中操作Redis)

简介 下载与安装 数据类型 常用命令 1.字符串操作命令 2.哈希操作命令 3.列表操作命令 push是将元素总是插入到第一个 0表示第一个&#xff0c;1表示第二个。-1表示倒数第一个&#xff0c;-2表示倒数第二个。当前命令的意思是第一个到倒数第一个&#xff0c;即就是全部元素 rpo…

NUAA-云计算-考试

19级期末 问题 答案: md格式 自己想办法看 # 随堂测验#### 一、请简述GFS 的系统架构和特点。**1. 系统架构**- GFS将整个系统节点分为三类角色&#xff1a;- Client&#xff08;客户端&#xff09;&#xff1a;Client是GFS提供给应用程序的访问接口&#xff0c;以库文件的…

迪文屏开发保姆级教程5—表盘时钟和文本RTC显示

这篇文章要讲啥事呢&#xff1f; 本篇文章主要介绍了在DGBUS平台上使用表盘时钟和文本时钟RTC显示功能的方法。 文哥悄悄话&#xff1a; 官方开发指南PDF&#xff1a;&#xff08;不方便下载的私聊我发给你&#xff09; https://download.csdn.net/download/qq_21370051/8864…

【GitHub精选项目】抖音/ TikTok 视频下载:TikTokDownloader 操作指南

前言 本文为大家带来的是 JoeanAmier 开发的 TikTokDownloader 项目&#xff0c;这是一个高效的下载 抖音/ TikTok 视频的开源工具。特别适合用户们保存他们喜欢的视频或分享给其他人。 TikTokDownloader 是一个专门设计用于下载 TikTok 视频的工具&#xff0c;旨在为用户提供一…

OpenCV学习笔记 - 使用密集光流检测运动的简单方法

一、简述 使用光流进行运动检测的方法与帧间差分方法类似。主要区别在于第一步,我们将从光流而不是帧差分中获取初始运动信息(一些神经网络模型也是基于光流和原始图像进行运动识别训练的)。 该算法概述如下: 1、计算密集光流 2、获得运动掩模的阈值光流 3、在运动蒙版中查…

Adobe InDesign各版本安装指南

下载链接 https://pan.baidu.com/s/16uvK0ICpDVzacD5FEhUiyQ?pwd0531 ​ #2024版 1.鼠标右击【Indesign2024(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 Indesign2024(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击…

Real-Time Volumetric Cloudscapes

实时体积云景 GPU Pro 7 实时体积云景的翻译 4.1 概览 游戏中的实时体积云通常为了提高渲染效率而降低质量。最成功的方法仅限于低空蓬松半透明的层状云。我们提出了一种体积解决方案&#xff0c;可以使用不断变化并且逼真的结果填充天空&#xff0c;来描绘高海拔卷云和所有…

OpenAI开发者大会简介

文章目录 GPT-4 Turbo 昨天晚上 OpenAI的首届开发者大会召开 Sam Altman也做了公开演讲&#xff0c;应该说 这是继今年春天发布GPT-4之后 OpenAI在AI行业又创造的一个不眠夜 过去一年 ChatGPT绝对是整个科技领域最热的词汇 OpenAI 也依靠ChatGPT取得了惊人的成绩 ChatG…

​【C语言】乘法表

题目要求&#xff1a; 实现一个函数&#xff0c;打印乘法口诀表&#xff0c;口诀表的行数和列数自己指定 如&#xff1a;输入9&#xff0c;输出9 * 9口诀表&#xff0c;输出12&#xff0c;输出12 * 12的乘法口诀表。 题目分析&#xff1a; 我们观察乘法口诀表可以发现&#x…

【Kubernetes】控制器Statefulset

Statefulset控制器 一、概念二、Statefulset资源清单文件编写技巧2.1、查看定义Statefulset资源需要的字段2.2、查看statefulset.spec字段如何定义2.3、查看statefulset的spec.template字段如何定义 三、Statefulset使用案例&#xff1a;部署web站点3.1、编写一个Statefulset资…

【ctf】whireshark流量分析之tcp_杂篇

目录 简介 常考 图片类 提取png.pcap&#xff08;常规&#xff09; 异常的流量分析&#xff08;*&#xff0c;特殊&#xff09; john-in-the-middle&#xff08;特殊&#xff09; ​编辑 zip类 1.pcap&#xff08;常规&#xff09; 方法1&#xff08;常规提取压缩包&…

绝地求生电脑版的最低配置要求?

绝地求生&#xff08;PlayerUnknowns Battlegrounds&#xff09;是一款非常热门的战术竞技游戏&#xff0c;它在全球范围内有着大量的玩家。为了让更多的玩家能够顺畅地体验这款游戏&#xff0c;下面将介绍绝地求生电脑版的最低配置要求。 CPU&#xff1a;Intel Core i5-4430或…

基于包围盒算法的三维点云数据压缩和曲面重建matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 包围盒构建 4.2 点云压缩 4.3 曲面重建 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................…

4.3 媒资管理模块 - Minio系统上传图片与视频

文章目录 一、上传图片1.1 需求分析1.2 数据模型1.2.1 media_files 媒资信息表 1.3 准备Minio环境1.3.1 桶环境1.3.2 连接Minio参数1.3.3 Minio配置类 1.4 接口定义1.4.1 上传图片接口请求参数1.4.2 上传图片接口返回值1.4.3 接口代码 1.5 MediaFilesMapper1.6 MediaFileServic…

技术阅读周刊第十一期

技术阅读周刊&#xff0c;每周更新。 历史更新 20231124&#xff1a;第七期20231201&#xff1a;第八期20231215&#xff1a;第十‍期 A Comprehensive guide to Spring Boot 3.2 with Java 21, Virtual Threads, Spring Security, PostgreSQL, Flyway, Caching, Micrometer, O…

第19章总结

一.Java绘图类 1.Graphics类 Graphics类是所有图形上下文的抽象基类&#xff0c;它允许应用程序在组件以及闭屏图像上进行绘制。Graphics类封装了Java支持的基本绘图操作所需的状态信息&#xff0c;主要包括颜色、字体、画笔、文本、图像等。 2.Graphics2D类 Graphics2…

MFC 工具栏

目录 工具栏概述 工具栏的使用 添加工具栏资源 创建&#xff0c;加载工具栏 设置工具栏停靠 工具栏概述 CToolBarCtrl-父类CWnd&#xff0c;封装了关于工具栏控件的各种操作。 CToolBar一父类CControlBar&#xff0c;封装了关于工具栏的操作&#xff0c;以及和框架窗口的…