JVM -运行时数据区 - 堆空间

JVM运行时数据区之堆空间 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。堆区在JVM 启动的时候即被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间。《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。(The heap is the run-time data area fromwhich memory for all class instances and arrays is allocated)我要说的是:“几乎”所有的对象实例都在这里分配内存。 阅读详情

1、堆的核心概念

1、一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。
2、Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间,【堆内存大小是可以调节的】
3、堆可以处于物理上不连续的,但在逻辑上它应该被视为连续的。
4、所有的对象实例化及数组都应当在运行时分配在堆上。
5、数组和对象可能永远不会存储在栈上,因为栈帧中保存引用,这个引用指向对象或者数组在堆中的位置。
6、在方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除。
7、堆,是垃圾收集器(GC)执行垃圾回收重点收集的区域。

2、堆内存细分

在这里插入图片描述

3、设置堆内存大小与OOM

1、设置堆空间大小的参数
  • -Xms:用来设置堆空间(年轻代+老年代)的初始内存大小
  • -Xmx:用来设置堆空间(年轻代+老年代)的最大内存大小
2 、默认堆空间大小
  • 初始内存大小:物理电脑内存大小/64
  • 最大内存大小:物理电脑内存大小/4
3、在Idea中设置堆空间大小

1、手动设置 :

-Xms600m -Xmx600m

开发和生产环境中建议将初始堆内存和最大堆内存设置成相同的值。为什么呢??
如果不设置为一样的话,那么在生产的环境中可能会不断的扩容,不断的GC垃圾回收,就会造成系统的压力。设置为一样,可以避免频繁的GC操作。

2、查看设置的参数:

  • 方式一:-XX:+PrintGCDetails
4、OOM说明和举例

在这里插入图片描述

在这里插入图片描述
当老年代空间已满就会出现OOM异常

4、年轻代和老年代

1、存储在JVM中的Java对象可以被划分为两类:

  • 一类是生命周期较短的瞬时对象,这类对象的创建和消亡都是非常迅速的
  • 另外一类对象的生命周期却非常长,在某些极端的情况下还能够与JVM的生命周期保持一致。
    2、Java堆区进一步细分的话,可以划分为年轻代(YoungGen)和老年代(OldGen)
    3、其中年轻代又可以划分为Eden空间、S0空间和S1空间(有时候也叫做from区、to区)
    在这里插入图片描述
    4、年轻代与老年代的占比情况:
    在这里插入图片描述
    5、新生代内存分配情况:
    在这里插入图片描述

5、对象分配过程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
总结:
1、针对幸存者S0和S1区的总结:复制之后有交换,谁空谁是to
2、关于垃圾回收:频繁在新生代收集,很少在养老区收集。几乎不在永久代/元空间收集。

在这里插入图片描述

6、Minor GC、Major GC、Full GC

在这里插入图片描述

6.1、年轻代GC触发机制

在这里插入图片描述

6.2 老年代GC(Major GC/Full GC)触发机制

在这里插入图片描述

6.3 Full GC触发机制

在这里插入图片描述

堆空间分代思想

在这里插入图片描述
在这里插入图片描述

7、内存分配策略(或对象提升规则)

在这里插入图片描述

8、堆空间参数大小设置

在这里插入图片描述

这种绑定设备的文件拷贝出来了,怎么放到一台新的P100上使用 🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。 阅读详情

相关推荐

适合初学者的ROS机器人教程(1): Ubuntu下ROS创建自己的包和使用github下载的包

ROS如何创建自己的包 1. 首先创建catkin工作空间(如果你以及有了请忽略) $ mkdir catkin_ws # 创建一个文件夹里面计划放我们的项目,ws是workspace的缩写 $ cd catkin_ws # 将当前工作文件夹切换到catkin_ws这个文件夹 ~/catkin_ws$ catkin_make # 执行catkin_make创建一ROS项目 此时你的catkin_...

@司南牧|知乎|博客|易懂教程|李韬 3243

java文件加载到jvm的运行(jvm 运行时数据区和如何被加载)

一个java类从编译到运行的一生 类加载机制

weixin_43979902的博客 1269

整车无线布置的综述

车载无线功能日益丰富,涵盖5G、GNSS、V2X等多种技术,布置需兼顾性能与美观。车顶是理想位置,鲨鱼鳍、后视镜等集成方案可优化空间。需考虑射频电缆损耗、GNSS天线视角、V2X全向覆盖等关键因素。整车测试需适应高频段需求,通过链路预算和互补天线设计优化信号。不同车型需定制方案,并注意抗干扰和多频段兼容性。(149字)

Godspeed_zwh的博客 1856

Java--业务场景:在Spring项目启动时加载Java枚举类到Redis中

项目具有很多的枚举类,而这些枚举类在前端页面中需要作为下拉框选项等组件被前端获取。为了后续获取枚举值更加方便快捷,我们在项目启动的时候将所有Java枚举类用一个hash存入Redis中,在提供一个接口,使得前端可以从Redis获取自己想要的枚举值。下文将讲解实现步骤。

芝麻馅的博客 2711

基于CY7C68013A芯片的USB2.0设计

基于FPGA的USB2.0读写控制项目简介CY7C68013A芯片介绍CY7C68013A芯片读写时序控制CY7C68013A芯片读写代码USB2.0的测试结果结束语 项目简介 我们前面已经写过了USB3.0的FPGA实现,所用到的芯片是FX600Q芯片,这次我们讲解USB2.0的FPGA代码的编写。我们用到的芯片是Cypress厂家的Cy7C68013A,该款芯片在市场上的应用率极广,我们这里不...

zhangningning1996的博客 1万+

Android音频学习(十四)——加载音频设备

loadHwModule 是 Android 音频系统的核心初始化函数,负责加载音频硬件抽象层(HAL)的模块实现。它建立 AudioPolicyService 与底层硬件的桥梁,将配置文件(audio_policy_config.xml)中的标签<module>定义转化为可操作的硬件对象,加载的是音频硬件模块(HAL实现),每个模块对应一种音频设备类型,以动态库的形式存在,负责与底层音频硬件交互。

miemie2014的博客 1730

JAVA 类加载到JVM内存中过程

大体分为五个步骤:加载 >> 验证 >> 准备 >> 解析 >> 初始化 1. 加载:在硬盘上查找并通过IO读入该类字节码文件(比如Demo.class)。例如调用类的 main()方法,new对象等,在加载阶段会在内存中生成一个代表此类的java.lang.class对象,作为方法区这个类的各种数据访问入口。 2. 验证:就是校验此类字节码文件的正确性。 3. 准备:给类的静态变量分配内存,并赋予默认值。比如private static int ag

qq_36544770的博客 1022

ZYNQ RFSoC 的DAC如何做到从 0到Fs频段 信号输出

之前一直没太了解 RFSoC 的DAC如何输出在 Fs/2 到 Fs 频率范围内的信号,例如 ZCU216中的 ZU49DR,其RF-DAC最大采样率是 9.85GSPS,如果想输出的信号中心频率在5.8G,它是如何有效输出在第二奈奎斯特区域范围的信号的。

weixin_44630490的博客 1551

java之将数据库数据读取到内存中

1 为了将配置信息或数据库的信息读取到内存中。可以程序启动时,启动一个servlet。在web.xml中进行配置其0 表示优先级为最大,这样就在程序启动时去加载servlet类。然后程序自动调用该servlet类的init方法 如:   initServlet   com.servlet.InitServlet   0   2 创建一个初始化加载的servlet时。需要在该se

xclsky的博客 1万+

基于Simulink的双向DC-DC变换器在储能系统中的应用仿真

摘要:本文详细介绍了基于Simulink的双向DC-DC变换器在光伏储能系统中的仿真实现。主要内容包括:1)采用非隔离型双向Buck-Boost拓扑作为储能系统枢纽;2)针对750V直流微网中的20kWh锂电池接口场景进行建模;3)详细阐述双闭环控制器设计(电压外环+电流内环)、工作模式判断逻辑等关键步骤;4)通过仿真验证了系统在功率阶跃和模式切换下的性能。文章提供了完整的建模流程和控制方法,为储能系统接口设计提供了实用参考。

amy_mhd的博客 177

【51单片机仿真】基于51单片机设计的多功能电子时钟日历(实时时钟闹钟秒表温度检测)系统__资料编号5

该项目是基于单片机的多功能电子时钟系统,集成了时间显示、闹钟设置、秒表功能以及温度显示等功能。主要硬件包括1602液晶显示屏、DS1302时钟芯片、DS18B20温度传感器和蜂鸣器。系统通过按键进行时间和闹钟的设置,并实时显示当前时间和温度。

嵌入式阿齐Archie 2万+

在Java中,执行SQL查询到数据后,存储在哪里了?

SQL查询的数据库临时数据,存储在哪里了

危险、的博客 1229

基于STM32L4XX、HAL库的AD7124模数转换器ADC驱动程序设计

/ 检查ID是否正确 (AD7124-4/AD7124-8有不同的ID)// 转换为电压值 (假设使用内部2.5V基准)// 构造读命令: 1(R/W) + 1(0) + 6(寄存器地址)// 构造写命令: 0(R/W) + 1(0) + 6(寄存器地址).config = 0, // 使用配置0。内置可编程增益放大器(PGA):1-128倍。// 读取ADC数据。// 读取当前ADC控制寄存器。// 检查数据是否就绪。// 写回ADC控制寄存器。// 初始化AD7124。

zhusl6688的博客 519

JVM笔记(4)—— 运行时数据区——堆空间

为什么要对堆空间进行分代? 因为不同对象的生命周期不同,绝大部分对象都是临时对象,如果不进行分代设计,那每次GC都要对所有对象进行扫描,影响GC性能,通过分代设计,大部分时候GC只需要对其中一块空间进行垃圾回收,优化了整体性能。

m0_56602092的博客 711

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JVM——(7)运行时数据区的堆空间

文章目录前言一、堆的核心描述堆与进程堆的内存细分JVisualVM可视化查看堆内存二、设置堆内存大小与OOMOOM举例三、年轻代与老年代年轻代配置新生代与老年代在堆结构的占比四、图解对象分配过程对象分配具体过程(一般情况)图解对象分配(一般情况)对象分配特殊情况常用调优工具五、Minor GC、MarjorGc、FullGc部分收集:不是完整收集整个Java堆的垃圾收集整堆收集(Full GC):收集整个java堆和方法区的垃圾收集。年轻代 GC(Minor GC)触发机制老年代GC(MajorGC)触发机

zhouhengzhe的博客 1484

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JVM运行时数据区篇(堆空间扩展知识)

堆空间扩展知识1.堆空间常见参数设置2.堆空间私有缓存区域TLAB3.堆空间是分配对象的唯一选择吗?4.什么是逃逸分析?5.基于逃逸分析进行的优化策略1.栈上分配2.同步省略3.标量替换6.逃逸分析总结 1.堆空间常见参数设置 参数名 参数含义 -XX:PrintFlagsInitial 查看所有可设置参数的默认初始值 -XX:PrintFlagsFinal 查看所有可设置参数的最终值( 显示修改后的 ) -Xms 设置堆空间内存的初始值 -Xmx 设置堆空间内存的最大值 -

ProChick's Blog 1648

JVM运行时数据区篇(堆空间基本概述)

堆空间基本概述1.什么是堆空间?2.堆存储程序示例3.堆的内存结构4.堆的内存设置5.堆空间的分代 1.什么是堆空间? 一个Java程序进程对应一个JVM实例、一个运行时数据区( Runtime类 ),同时又包含多个线程,这些线程共享唯一的方法区和堆空间,每个线程又包含了程序计数器、本地方法栈和虚拟机栈 每一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域 堆区在JVM启动的时候就被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间 堆内存的大小是可以调节的 JVM规范表明,堆可以

ProChick's Blog 1096

JVM|运行时数据区(堆空间)

现代垃圾收集器大部分都基于分代收集理论设计,堆空间细分为:针对堆空间,出现了内存溢出。老年代一般占2/3堆空间,新生代一般占1/3堆空间。 垃圾回收频繁在年轻代收集,很少在老年代中收集,几乎不在永久区/元空间中收集。分代的用处是:优化GC性能。 可以方便GC找到适合的区域。分为伊甸园区(eden space E区),survivor0区,surive1区(又称from区和to区),其中存储的只有E区和survive1区或0区,两个区必须有一个是空的。(内存占比8:1:1) 几乎所有的Java对象都是在Ede

z754916067的博客 265

我所知道JVM虚拟机之运行时数据区的堆空间

前言从本篇开始我们就要进入运行时数据区的堆空间学习一、堆的核心描述《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。(The heap is the run-time data area from which memory for all class instances and arrays is allocated)从实际使用角度看:“几乎”所有的对象...

我吃西红柿 195

Jvm学习笔记4:运行时数据区概述(堆空间)

目录一级目录二级目录三级目录 一级目录 二级目录 三级目录

weixin_43911286的博客 685

JVM运行时数据区篇(堆空间进阶掌握)

堆空间进阶掌握1.堆中对象分配的一般过程2.堆中对象分配代码示例3.堆中垃圾回收器常见种类4.堆中垃圾回收器触发机制5.堆中垃圾回收代码示例6.堆中对象分代的思想7.堆中对象分配的策略 1.堆中对象分配的一般过程 为新对象分配内存是件非常严谨和复杂的任务,JVM的设计者们不仅需要考虑内存如何分配、在哪里分配的问题,并且由于内存分配算法与内存回收算法密切相关,所以还需要考虑GC执行完内存回收后是否会在内存空间中产生内存碎片。 首先把新生成的对象放在伊甸园区 当伊甸园的空间满时,就会触发JVM的垃

ProChick's Blog 1151

JVM虚拟机运行时数据区-堆空间

堆的核心概述 一个JVM实例只有一个堆内存,堆也是Java内存管理的核心区域 Java堆着Jvm 启动的时候就会被创建,其空间大小就确定了。是JVM管理的最大的一块内存空间 堆内存的大小是可以调节的 -Xms10m -Xmx20m 最启动初始化内存。 启动时最大内存 <Java 虚拟机规范中> 堆的核心概述: 内存细分 现代垃圾收集器大部分都基于分代收集理论设计, 堆空间细分为: Java 7 及以前堆内存逻辑上分为三部分: 新生区 + 养老区 + 永久代 Young Genera

qq_40990836的博客 360

JVM运行时数据区-堆空间与对象头

是是是

weixin_41300437的博客 235

java启动默认堆内存_JDK1.8 JVM运行时数据区域划分以及 堆空间内存分配(默认情况下)...

一、JDK1.8 JVM运行时数据区域概览这里介绍的是JDK1.8 JVM运行时内存数据区域划分。1.8同1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。二、各区域介绍1. 程序计数器每个线程一块,指向当前线程正在执行的字节码代码的行号。如果当前线程执行的是n...

weixin_31746993的博客 1555
上一篇: JVM - 运行时数据区(程序计数器、栈)
下一篇: 电商项目 - 购物车功能分析
程序员老石
博客等级 码龄8年 286粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值