jvm学习笔记(一) ----- JAVA 内存

JAVA 内存

  • 一、程序计数器
  • 二、虚拟机栈
  • 三、本地方法栈
  • 四、堆
  • 五、非JAVA内存(堆外内存)
    • 1.元空间(Metaspace)
    • 2.直接内存

链接: jvm学习笔记(二) ----- 垃圾回收
链接: jvm学习笔记(三) ----- 垃圾回收器

在这里插入图片描述

一、程序计数器

  1. 虚拟机需要通过『程序计数器』记录指令执行到哪了。
  2. 线程要轮流使用 CPU 时间片,因此需要『程序计数器』来记住正在执行的字节码的地址。例如 线程 A 的计数器记录当前执行到了第三行字节码,这时候时间片用完了,CPU 切换到其它线程运行,当 CPU 再次切换到 线程 A 时,它就会从计数器得知上次执行的代码位置,继续向下运行。

在这里插入图片描述

二、虚拟机栈

  1. 作用: 一个线程使用的内存大小。线程内调用一次方法,就会产生一个栈帧,栈帧内包含方法内局部变量,方法参数,返回地址等。多个栈帧合称为『栈』,而正在执行的方法称为『活动栈帧』,一个线程内同一时刻只能有一个『活动栈帧』
  2. 配置:
-XssThe default value depends on the platform: 
* Linux/x64 (64-bit): 1024 KB 
* macOS (64-bit): 1024 KB 
* Oracle Solaris/x64 (64-bit): 1024 KB 
* Windows: The default value depends on virtual memory
*
  1. 特点:
    • 方法执行完毕,栈帧内存即被释放
    • 因为线程私有,不存在共享,因此线程安全
    • 值越大,会让线程数更少
  2. 栈内存溢出情况
    • 栈太小,方法调用过深(栈帧太多)
    • 栈太小,方法内局部变量太多(栈帧太大)
  3. 测试代码如下:
public class Demo1 {private static  int count = 0;public static void main(String[] args) {method1();}private static void method1() {count ++ ;System.out.println(count);method1();}}

三、本地方法栈

  • 每个线程启动时,还会分配『本地方法栈』内存,来给哪些其它语言实现的方法(称为本地方法)使用。
    +在这里插入图片描述

四、堆

  1. Java堆通常是Java虚拟机所管理的内存中最大的一块。Java堆是被锁有线程共享的一块内存区域,在虚拟机启动时创建。这块区域唯一的目的就是存放对象实例,几乎所有对象实例及数组都在该区域分配内存,从 JDK1.7 开始,StringTable等也会使用堆内存。
  2. Java堆时垃圾收集器管理的主要区域(GC堆),从内存回收的角度(收集器一般采用分代收集算法),堆被划分为新生代和旧生代,新生代又被进一步划分为Eden(伊甸园) 和 Survivor(幸存区) 区,最后Survivor由FromSpace和ToSpace组成,结构图如下所示:在这里插入图片描述
  3. 堆空间内存分配(默认情况下)
  • 老年代 : 三分之二的堆空间

  • 年轻代 : 三分之一的堆空间

  • eden区: 8/10 的年轻代空间

  • survivor From : 1/10 的年轻代空间

  • survivor To : 1/10 的年轻代空间

五、非JAVA内存(堆外内存)

1.元空间(Metaspace)

在这里插入图片描述

  1. 作用:用来存储类对象,类加载器,静态变量,StringTable,SymbolTable,即时编译器生成的代码等。

  2. 历史:

    1. 『方法区』是 Java VM 规范中定义的概念,具体实现根据各个虚拟机厂商的不同而不同。对于 Oracle 的 HotSpot 虚拟机来说,最初作为『方法区』的实现称之为『永久代』,从 Java 8 开始,『永久代』被替换为『元空间』。
    2. 『永久代』,垃圾回收仍然会考虑『永久代』,但回收效率不高,StringTable 最初也使用的是『永久代』内存,容易造成 OOM 问题。
    3. 『元空间』,使用了操作系统内存,默认没有上限。并且 StringTable 的空间被移至堆内存,『元空间』中仅存储类加载器、类对象等信息,垃圾回收不用考虑『元空间』,元空间自己管理内存释放。

2.直接内存

  1. 定义:在 NIO 进行 IO 操作时,用到的数据缓冲内存 DirectBuffer
  2. 特点:典型实现由 DirectByteBuffer,它使用了堆外内存,可以用 allocateDirect 方法创建
  3. 好处:
    • 没有使用堆内存,减少 GC 压力
    • I/O 读写操作直接操作堆外内存,省去了系统空间和用户空间的数据拷贝
    • 堆外内存回收通过虚引用实现

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

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

相关文章

代码随想录算法训练营day43

题目:1049. 最后一块石头的重量 II 、494. 目标和、474.一和零 参考链接:代码随想录 1049. 最后一块石头的重量 II 思路:本题石头是相互粉碎,粉碎后剩下的重量就是两块石头之差,我们可以想到,把石头分成…

使用智谱 GLM-4-9B 和 SiliconCloud 云服务快速构建一个编码类智能体应用

本篇文章我将介绍使用智谱 AI 最新开源的 GLM-4-9B 模型和 GenAI 云服务 SiliconCloud 快速构建一个 RAG 应用,首先我会详细介绍下 GLM-4-9B 模型的能力情况和开源限制,以及 SiliconCloud 的使用介绍,最后构建一个编码类智能体应用作为测试。…

数据结构和算法之数组和链表

一、数组 数组是一种线性数据结构,它是由一组连续的内存单元组成的,用于存储相同类型的数据。在JavaScript中,数组可以包含任意类型的数据,不只限于基本数据类型。 1.存储方式 在内存中,数组的元素是连续存储的&…

【Vue】组件的存放目录问题

注意: .vue文件 本质无区别 组件分类 .vue文件分为2类,都是 .vue文件(本质无区别) 页面组件 (配置路由规则时使用的组件)复用组件(多个组件中都使用到的组件) 存放目录 分类开来的…

Llama模型家族之拒绝抽样(Rejection Sampling)(二)均匀分布简介

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

ssti模板注入

一、Flask应用 1、介绍 定义 Flask:是一个使用Python编写的轻量级web应用框架。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。 特点 良好的文档、丰富的插件、包含开发服务器和调试器、集成支持单元测试、RESTful请求调度、支持安全cookies、基于Unicode。 …

手机短信删除怎么恢复?快速找回的3个秘密武器

手机,这个我们每天离不开的小玩意儿,有时候也会让我们头疼不已。比如,你一不小心,或者为了清理点空间,就把那些重要的短信给删了。这些短信可能是你和好友的深夜聊天,或者是重要的工作信息。一旦删除&#…

哪款开放式耳机佩戴最舒服?2024五款备受推崇产品分享!

​在现今耳机市场,开放式耳机凭借其舒适的佩戴体验和独特的不入耳设计,备受消费者追捧。它们不仅让你在享受音乐时,仍能察觉周围的声音,确保与人交流无障碍,而且有利于耳朵的卫生与健康。对于运动爱好者和耳机发烧友而…

GIGE 协议摘录 —— 引导寄存器(四)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现(一) GIGE 协议摘录 —— GVCP 协议(二) GIGE 协议摘录 —— GVSP 协议(三) GIGE 协议摘录 —— 引导寄存器(四) GIGE 协议…

前后端实现文件上传进度条-实时进度

后端接口代码&#xff1a; PostMapping("/upload")public ResponseEntity<String> handleFileUpload(RequestParam("file") MultipartFile file) {try {// 获取文件名String fileName file.getOriginalFilename();// 创建上传目标路径Path targetPa…

基于简单Agent对医疗数据进行分析

数据表 供应商资格审核规定.pdf 医生名录.xlsx 历史就诊记录.xlsx 患者信息名录.xlsx 药品.xlsx 药品库存管理.xlsx 采购单位基本信息.xlsx Agent测试 模型基于ChatGPT-3.5 问题&#xff1a;帮我找出不达标的供应商 Agent分析过程 [Thought: 0] Key Concepts: - 不达标的供…

嵌入式Linux系统中RTC应用的操作详解

第一:RTC的作用以及时间简介 “RTC”的英文全称是Reul-Time Clock,翻译过来是实时时钟芯片.实时时钟芯片是日常生活中应用最为广泛的电子器件之一,它为人们或者电子系统提供精确的实时时间,实时时钟芯片通过引脚对外提供时间读写接口,通常内部带有电池,保证在外部系统关…

【Android】使用EventBus进行线程间通讯

EventBus 简介 EventBus&#xff1a;github EventBus是Android和Java的发布/订阅事件总线。 简化组件之间的通信 解耦事件发送者和接收者 在 Activities, Fragments, background threads中表现良好 避免复杂且容易出错的依赖关系和生命周期问题 Publisher使用post发出…

好书推荐-人工智能数学基础

本书以零基础讲解为宗旨&#xff0c;面向学习数据科学与人工智能的读者&#xff0c;通俗地讲解每一个知识点&#xff0c;旨在帮助读者快速打下数学基础。    全书分为 4 篇&#xff0c;共 17 章。其中第 1 篇为数学知识基础篇&#xff0c;主要讲述了高等数学基础、微积分、泰…

Open vSwitch 数据包处理流程

一、Open vSwitch 数据包转发模式 Open vSwitch 根据不同的模块使用&#xff0c;主要分为两种数据包的转发模式&#xff1a;Datapath 模式和 DPDK 模式&#xff0c;这两种模式的主要区别在于&#xff1a; Datapath 模式&#xff1a; 使用内核空间的网络栈进行数据包的转发性能相…

UML实现图-部署图

概述 部署图(Deployent Diagram)描述了运行软件的系统中硬件和软件的物理结构。部署图中通常包含两种元素:节点和关联关系&#xff0c;部署图中每个配置必须存在于某些节点上。部署图也可以包含包或子系统。 节点是在运行时代表计算机资源的物理元素。节点名称有两种:简单名和…

苍穹外卖笔记-08-套餐管理-增加,删除,修改,查询和起售停售套餐

套餐管理 1 任务2 新增套餐2.1 需求分析和设计接口设计setmeal和setmeal_dish表设计 2.2 代码开发2.2.1 根据分类id查询菜品DishControllerDishServiceDishServiceImplDishMapperDishMapper.xml 2.2.2 新增套餐接口SetmealControllerSetmealServiceSetmealServiceImplSetmealMa…

Nginx03-动态资源和LNMP介绍与实验、自动索引模块、基础认证模块、状态模块

目录 写在前面Nginx03案例1 模拟视频下载网站自动索引autoindex基础认证auth_basic模块状态stub_status模块模块小结 案例2 动态网站&#xff08;部署php代码&#xff09;概述常见的动态网站的架构LNMP架构流程数据库Mariadb安装安全配置基本操作 PHP安装php修改配置文件 Nginx…

AI做的2024年高考数学试卷,答案对吗?

2024年高考数学考试已经结束&#xff0c;现在呈上数学真题及AI给出的解答。供各位看官欣赏。 总的来说&#xff0c;人工做题两小时&#xff0c;AI解答两分钟。 但是&#xff0c;AI做的答案是否正确&#xff0c;那就要各位看官来评判了&#xff01; 注&#xff1a;试卷来源于…

2024年5大制作AI电子手册工具推荐

AI电子手册作为一种结合了人工智能技术和传统电子手册功能的新型工具&#xff0c;逐渐成为了企业进行知识管理和信息传递的重要工具&#xff0c;为企业提高效率、优化用户体验。在本文中&#xff0c;LookLook同学将简单介绍一下什么是AI电子手册、对企业有什么好处&#xff0c;…