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

系列七、JVM的内存结构【堆(Heap)】

一、概述

        一个JVM实例只存在一个堆内存,堆内存的大小是可以手动调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行,堆内存分为三个部分,即:新生区、养老区、永久区(Java7)/元空间(Java8)

1.1、新生区

        新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应用,最后被垃圾回收器收集,结束生命。新生区又分为2部分,即:伊甸区(Eden space)和幸存者区(Survivor space),所有的类都是在伊甸区被new出来的。幸存区有2个:0区(Survivor 0 space)和1区(Survivor 1 space)。当伊甸区的空间用完时,程序又需要创建对象,JVM的垃圾回收器将对伊甸区的垃圾进行回收(Minor GC),将伊甸区中的不再被其他对象所引用的对象进行销毁。
   如果出现了java.lang.OutOfMemoryError:Java heap space异常,说明java虚拟机的堆内存不够,原因有二:
   1、java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整;
   2、代码中创建了大量大对象,并且长时间不能被垃圾回收器收集(该对象还被引用着);

1.1.1、Minor GC的过程

复制===>清空===》交换 

1、eden、from区中的对象复制到to区,年龄+1

        首先,当eden区满的时候会触发第一次GC,把还活着的对象拷贝到from区,当eden区再次满的时候会扫描eden区和from区,对这两个区域的对象进行垃圾回收,经过这次回收后还存活着的对象,则直接复制到to区(如果有对象的年龄已经达到了老年的标准,则复制到老年代),同时把这些对象的年龄+1;

2、清空eden、from区

        然后清空eden区和from区中的的对象,原来的from区变to区,to区变为新一轮的from区,也即复制之后有交换,谁空谁是to;

3、进入老年代

        部分对象会在from区和to区中复制来复制去,如此交换15次(由JVM的参数MaxTenuringThreshold决定,这个参数默认值为15)之后,如果还活着将进入老年代。

1.2、养老区

存放的是经历过15次完整垃圾回收的对象。

1.3、元空间

         实际而言,方法区(Method Area)和堆一样,是各个线程共享的内存区域,用于存储虚拟机加载的:类信息+普通常量+静态常量+编译器编译后的代码等等,虽然JVM规范将方法区描述为堆的一个逻辑部分,但它却还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。   


        对于HotSpot虚拟机,很多开发者习惯将方法区称之为“永久代(Parmanent Gen)” ,但严格本质上说两者不同,或者说使用永久代来实现方法区而已,永久代是方法区(相当于是一个接口interface)的一个实现,jdk1.7的版本中,已经将原本放在永久代的字符串常量池移走。

        永久存储区是一个常驻内存区域,用于存放JDK自身所携带的 Class,Interface 的元数据,也就是说它存储的是运行环境必须的类信息,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭 JVM 才会释放此区域所占用的内存。

 

二、堆内存参数调优

2.1、堆内存参数调优调哪些参数

-Xms堆空间的最小值,默认为物理内存的1/64
-Xmx堆空间的最大值,默认为物理内存的1/4
-XX:+PrintGCDetails输出详细的GC处理日志

 

 

 

2.2、堆内存的默认物理内存 

/*** @Author : 一叶浮萍归大海* @Date: 2023/11/16 14:50* @Description: 获取堆内存的默认物理内存大小*/
public class HeapMainApp {public static void main(String[] args) {// Java虚拟机试图使用的最大内存long maxMemory = Runtime.getRuntime().maxMemory();// 当前Java虚拟机中的内存总量long totalMemory = Runtime.getRuntime().totalMemory();System.out.println("【-Xmx】最大内存 = " + maxMemory + " (字节)、" + (maxMemory / (double) 1024 / 1024) + " (MB)");System.out.println("【-Xms】总内存 = " + totalMemory + " (字节)、" + (totalMemory / (double) 1024 / 1024) + " (MB)");}}

2.3、修改堆内存大小

-Xms1024m -Xmx1024m -XX:+PrintGCDetails

 

三、OOM异常演示

/*** @Author : 一叶浮萍归大海* @Date: 2023/11/16 15:31* @Description: 修改堆内存的最大值和最小值为10m,方便观察GC的回收过程* -Xms10m -Xmx10m -XX:+PrintGCDetails*/
public class OomMainApp {public static void main(String[] args) {String message = "欧耶,今天星期五!";while (true) {message += message + new Random().nextInt(88888888) + new Random(99999999);}}}

四、获取本机的cpu核数

/*** @Author : 一叶浮萍归大海* @Date: 2023/11/16 14:39* @Description: 获取本机的电脑核数*/
public class CpuMainApp {public static void main(String[] args) {System.out.println(Runtime.getRuntime().availableProcessors());}}

相关文章:

系列七、JVM的内存结构【堆(Heap)】

一、概述 一个JVM实例只存在一个堆内存,堆内存的大小是可以手动调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行,堆内存分为三个部分,即…...

什么是Selenium?如何使用Selenium进行自动化测试?

什么是 Selenium? Selenium 是一种开源工具,用于在 Web 浏览器上执行自动化测试(使用任何 Web 浏览器进行 Web 应用程序测试)。   等等,先别激动,让我再次重申一下,Selenium 仅可以测试Web应用…...

【蓝桥杯 第十五届模拟赛 Java B组】训练题(A - I)

目录 A、求全是字母的最小十六进制数 B、Excel表格组合 C、求满足条件的日期 D、 取数字 - 二分 (1)暴力 (2)二分 E、最大连通块 - bfs F、哪一天? G、信号覆盖 - bfs (1)bfs&#xf…...

【数据结构】手撕双向链表

目录 前言 1. 双向链表 带头双向循环链表的结构 2. 链表的实现 2.1 初始化 2.2 尾插 2.3 尾删 2.4 头插 2.5 头删 2.6 在pos位置之前插入 2.7 删除pos位置 3.双向链表完整源码 List.h List.c 前言 在上一期中我们介绍了单链表,也做了一些练习题&…...

性能测试 —— Jmeter接口处理不低于200次/秒-场景

需求:期望某个接口系统的处理能力不低于200次/秒,如何设计? ①这个场景是看服务器对某个接口的TPS值是否能大于等于200,就可以了; ②系统处理能力:说的就是我们性能测试中的TPS; ③只要设计一…...

Qt中使用QNetworkAccessManager类发送https请求时状态码返回0

前言 在项目开发中,碰到一个问题,使用QNetworkAccessManager类对象发送https请求时,状态码一直返回0,抓包分析看请求响应也是正常的。费了好大劲终于搞定了,主要是两个原因导致的。 原因一:未设置支持SSL…...

Linux - 物理内存管理 - memmap

说明 裁减内核预留内存占用,在启动log中,发现memmap占用了大块内存(446个pages)。 On node 0 totalpages: 32576 memblock_alloc_try_nid: 1835008 bytes align0x40 nid0 from0x0000000000000000 max_addr0x0000000000000000 al…...

Python爬虫动态ip代理防止被封的方法

目录 前言 一、什么是动态IP代理? 二、如何获取代理IP? 1. 付费代理IP 2. 免费代理IP 3. 自建代理IP池 三、如何使用代理IP爬取数据? 1. 使用requests库设置代理IP 2. 使用urllib库设置代理IP 3. 使用selenium库设置代理IP 四、常…...

01Urllib

1.什么是互联网爬虫? 如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据 解释1:通过一个程序,根据Url(http://www.…...

python爬取酷我音乐 根据歌名进行爬取

# _*_ coding:utf-8 _*_ # 开发工具:PyCharm # 公众号:小宇教程import urllib.parse from urllib.request import urlopen import json import time import sys import osdef Time_1...

【深度学习】吴恩达课程笔记(五)——超参数调试、batch norm、Softmax 回归

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 【吴恩达课程笔记专栏】 【深度学习】吴恩达课程笔记(一)——深度学习概论、神经网络基础 【深度学习】吴恩达课程笔记(二)——浅层神经网络、深层神经网络 【深度学习】吴恩达课程笔记(三)——参数VS超参数、深度…...

腾讯云轻量级服务器和云服务器什么区别?轻量服务器是干什么用的

随着互联网的迅速发展,服务器成为了许多人必备的工具。然而,面对众多的服务器选择,我们常常会陷入纠结之中。在这篇文章中,我们将探讨轻量服务器和标准云服务器的区别,帮助您选择最适合自己需求的服务器。 腾讯云双十…...

解决:虚拟机远程连接失败

问题 使用FinalShell远程连接虚拟机的时候连接不上 发现 虚拟机用的VMware,Linux发行版是CentOs 7,发现在虚拟机中使用ping www.baidu.com是成功的,但是使用FinalShell远程连接不上虚拟机,本地网络也ping不通虚拟机&#xff0c…...

SpringBoot项目集成发邮件功能

1&#xff1a;引入依赖2&#xff1a;配置设置3&#xff1a;授权码获取&#xff1a;4&#xff1a;核心代码5&#xff1a;postman模拟验证6&#xff1a;安全注意 1&#xff1a;引入依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>c…...

【Spring篇】使用注解进行开发

&#x1f38a;专栏【Spring】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出小吉的问题 文章目录 &#x1f33a;原代码&#xff08;无注解&#xff09;&#x1f384;加上注解⭐两个注…...

Flink(六)【DataFrame 转换算子(下)】

前言 今天学习剩下的转换算子&#xff1a;分区、分流、合流。 每天出来自学是一件孤独又充实的事情&#xff0c;希望多年以后回望自己的大学生活&#xff0c;不会因为自己的懒惰与懈怠而悔恨。 回答之所以起到了作用&#xff0c;原因是他们自己很努力。 …...

【2023春李宏毅机器学习】生成式学习的两种策略

文章目录 1 各个击破2 一步到位3 两种策略的对比 生成式学习的两种策略&#xff1a;各个击破、一步到位 对于文本生成&#xff1a;把每一个生成的元素称为token&#xff0c;中文当中token指的是字&#xff0c;英文中的token指的是word piece。比如对于unbreakable&#xff0c;他…...

Android13 adb 无法连接?

Android13 adb 无法连接? 文章目录 Android13 adb 无法连接?一、前言二、替换adbGoogle 官网对adb的介绍&#xff1a;Google 提供的adb tools的下载&#xff1a; 三、总结1、adb connect 连接后显示offline2、输入adb devices 报错&#xff1a;版本不匹配导致3、adb常用命令4…...

Ubuntu 20.04 调整交换分区大小

Ubuntu 调整交换分区大小 一、系统情况二、去除旧的交换分区文件三、配置并启用交换分区四、查看swap文件大小 一、系统情况 Ubuntu &#xff1a;Ubuntu 20.04.6 LTS 交换分区位置&#xff1a; cat /proc/swaps二、去除旧的交换分区文件 去掉旧的交换分区有两个步骤&#x…...

将Agent技术的灵活性引入RPA,清华等发布自动化智能体ProAgent

近日&#xff0c;来自清华大学的研究人员联合面壁智能、中国人民大学、MIT、CMU 等机构共同发布了新一代流程自动化范式 “智能体流程自动化” Agentic Process Automation&#xff08;APA&#xff09;&#xff0c;结合大模型智能体帮助人类进行工作流构建&#xff0c;并让智能…...

GLM-4-9B-Chat-1M模型推理加速方案

GLM-4-9B-Chat-1M模型推理加速方案 1. 引言 如果你正在使用GLM-4-9B-Chat-1M这个支持百万级上下文的大模型&#xff0c;可能会发现推理速度有时候不太理想。特别是在处理长文本时&#xff0c;生成响应需要等待较长时间。这其实是很正常的现象&#xff0c;毕竟模型参数量达到9…...

增程式混合动力汽车MATLAB_simulink模型(串联)整车建模包括工况选择模型、驾驶员模型(PID控制)、整车工作模式控制模型、发动机模型、电机模型、电池模型、传动系统模型、整车动力学模型。

增程式混合动力汽车MATLAB/simulink模型&#xff08;串联&#xff09;整车建模包括工况选择模型、驾驶员模型&#xff08;PID控制&#xff09;、整车工作模式控制模型、发动机模型、电机模型、电池模型、传动系统模型、整车动力学模型。 此模型比较简单&#xff0c;当SOC低于SO…...

Allegro 17.4约束管理器实战:从基础规则到高速PCB设计优化

1. Allegro约束管理器入门指南 刚接触Allegro 17.4的工程师经常会问&#xff1a;为什么我的PCB设计总是出现DRC报错&#xff1f;为什么高速信号总是不稳定&#xff1f;其实问题的关键往往在于约束管理器的使用。作为Cadence Allegro的核心功能模块&#xff0c;约束管理器就像PC…...

SIFT算法二十年:为什么它仍是图像匹配的‘老兵’?对比ORB、SURF与深度学习特征

SIFT算法二十年&#xff1a;为什么它仍是图像匹配的‘老兵’&#xff1f; 在计算机视觉领域&#xff0c;特征提取与匹配一直是核心问题之一。从早期的传统算法到如今的深度学习模型&#xff0c;技术迭代层出不穷。然而&#xff0c;在这股浪潮中&#xff0c;SIFT&#xff08;Sca…...

Agent设计模式学习(基于langchain4j实现)(6) - 组合复杂工作流

一、定义Agent 1.1 CandidateWorkflow 1 public interface CandidateWorkflow { 2 Agent("根据个人履历和职位描述生成主简历&#xff0c;通过反馈循环针对职位描述进行定制&#xff0c;直至达到合格分数") 3 String processCandidate(V("lifeStory&q…...

【已验证】STM32驱动OLED(SSD1306)显示字符

本文介绍如何使用STM32F103C8T6&#xff08;蓝板&#xff09;通过软件模拟IIC协议驱动0.96英寸OLED&#xff08;驱动芯片SSD1306&#xff09;&#xff0c;这个小屏幕相信每一个朋友在大学生活里都不会错过&#xff0c;也是很多课设毕设显示需求的首选&#xff0c;我一向喜欢直接…...

STM32L152C段式LCD驱动库深度解析与移植指南

1. 项目概述LCD_DISCO_L152C是专为 STM32L152C-DISCO 开发板设计的 LCD 驱动库&#xff0c;其核心目标是提供轻量、可靠、可移植的底层显示控制能力。该库并非从零构建&#xff0c;而是基于 ST 官方为 STM32L476VG-DISCO&#xff08;如 NUCLEO-L476RG 或 DISCOVERY-BOARD-L476V…...

别再只会用Burpsuite爆破DVWA了!手把手教你用Python脚本+自定义字典搞定暴力破解

从零构建Python暴力破解工具&#xff1a;DVWA实战进阶指南 在渗透测试领域&#xff0c;暴力破解(Brute Force)始终是基础却有效的攻击手段。虽然Burpsuite这类工具提供了便捷的图形化操作界面&#xff0c;但真正理解其底层原理并能够自主开发定制化破解工具&#xff0c;才是安全…...

大厂AI团队配置揭秘:揭秘“预训练→后训练→推理部署→多模态扩展“的技术链路拆分逻辑!

大模型AI技术链路包含预训练、后训练、推理部署、多模态扩展四个不可逆环节&#xff0c;对技术能力和GPU资源需求各异。大厂将AI部门拆分为独立团队&#xff0c;以适配链路原理、提升研发效率。预训练团队负责构建通用基座模型&#xff0c;后训练团队进行能力校准&#xff0c;推…...

React项目实战:用XGPlayer打造带封面预览的沉浸式视频播放组件(附完整代码)

React项目实战&#xff1a;用XGPlayer打造带封面预览的沉浸式视频播放组件&#xff08;附完整代码&#xff09; 在当今内容为王的时代&#xff0c;视频已成为Web应用中不可或缺的元素。但如何让视频组件既美观又高效&#xff0c;同时提供流畅的用户体验&#xff1f;本文将带你深…...