十九、java虚拟机堆

news2024/10/6 6:47:46

堆的核心概述

在这里插入图片描述
1.一个JVM实例只存在一个堆内存,堆也是java内存管理的核心区域。
2.Java堆区子啊JVM启动的时候即被创建,其空间大小也就确定了,是jvm管理的最大一块内存空间,
1)堆内存的大小是可以调节的。
3.《java虚拟机规范》规定, 堆可以处理物理上不连续的内存空间,但在逻辑上它应该被视为连续的。
4.所有的线程共享java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer, TLAB)
5.《java虚拟机规范》中对java堆的描述是:所有的对象实例以及数组都应当子啊运行时分配在堆上。
6.数组和对象可能永远不会存储在站上,因为栈帧中保存引用,这个引用指向对象挥着数组在堆中 的位置。
7.在方法结束后,对中通的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除。
8.堆,是GC(Garbage Collection垃圾收集器)执行垃圾回归收的重点区域。

在这里插入图片描述
内存细分
现代垃圾收集器大部分都基于分代收集理论设计,堆空间细分为:
1.Java7之前堆内存逻辑上分为三部分:新生区+养老区+永久区
1)Yong Generation Space 新生区 Young/New 又被划分为Eden区和Survior区
2)Tenure generaton space 养老区 Ole/Tenure
3)Permanent Space 永久区 Perm
2.Java8及之后堆内存逻辑上分为三部分:新生区 + 养老区 + 元空间
1)Young Gneration Space 新生区 Young/New 又被划分为Eden区和Survivor区
2Tenure generation space 养老区 Ole/Tenure
3)Meta Space 元空间 Meta

约定:新生区 <==>新生代 <=>年轻区 养老区《》老年区《》老年代 永久区《》永久代

堆空间内部结构
在这里插入图片描述
对空间大小的设置
1.Java堆区用于存储Java对象实例,那么堆的大小在JVM启动时就已经设定好了,大家可以同各国选项"-Xmx"和“-Xms”来进行设置。
1)“-Xms”用于标识堆区的起始内存,等价于-XX:InitialHeapSize
2) “-Xmx"则用于表示堆区的最大内存,等价于-XX:MaxHeahpSize
2.一旦堆区中的内存大小超过”-Xmx"所指定的最大内存时,将会抛出OutOfMemoryError异常。
3.通常会将-Xms 和 -Xmx 两个参数陪只相同的值,其目的是为了能够在JAVA垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小,从而提高性能。
4.默认情况下,初始内存大小:物理电脑内存大小/64 最大内存大小:物理电脑内存大小/4

-X 是jvm的运行参数
ms 是memory start
-Xmx 用来设置堆空间(年轻代+老年代)的最大内存大小
开发中建议将初始对内存和最大的堆内存设置成相同的值。

年轻代与老年代
1.存储在JVM中的Java对象可以被划分两类:
1)一类是生命周期较短的瞬时对象,这类对象的创建和消亡都非常迅速。
2)另外一类对象的生命周期却非常长,在某些极端的情况下还能够与JVM的生命周期保持一致。
2.Java堆区进一步细分的话,可以划分为年轻代(YonungGen)和老年代(OldGen)。
3.其中年轻代又可以划分为Eden空间、Survivo()空间和Survivorl空间(有时也叫做from区、to区)。
在这里插入图片描述
下面这参数开发中一般不会调:
在这里插入图片描述
配置新生代与老年代在堆结构的占比
1)默认-XX:NewRatio=2,表示新生代占1,老年代占2,新生代占整个堆的1/3
2)可以修改-XX:NewRatio=4,表示新生代占1,老年代占4,新生代占整个堆的1/5

1.在HotSpot中,Eden空间和另外两个Survivor空间缺省所占的比例是8:1:1
2.当然开发人员可以通过选项"-XX:SurvivorRatio"调整这个空间比例。比如:-XX:SurvivorRatio= 8
3.几乎所有Java对象都是在Eden区被new出来的
4.绝大部分的Java对象的销毁都在新生代进行了
IBM公司的专门研究表明,新生代中80%的对象都是“朝生夕死”的。
5.可以使用选项"-Xmn"设置新生代最大内存大小
这个参数一般使用默认值就可以了

对象分配过程:概述
为新对象分配内存是一件非常严谨和复杂的任务,JVM的设计者们不仅需要考虑内存如何分配、在哪里分配等问题,并且由于内存分配算法与内存回收算法密切相关,所以还需要考虑GC执行完内存回收后是否会在内存空间产生内存碎片。
1.new的对象先放一点园区,此区又大小限制。
2.当伊甸园的空间填满时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收,将伊甸园区中的不再被其他对象所引用的对象进行销毁,再加载新的对象放到伊甸园区。
3.然后将伊甸园的剩余对象一定到i幸存者区0。
4.如果再次触发垃圾回收,此时上次幸存下来的放到幸存者0区的,如果没有回收,就会放到幸存者1区。
5.如果再次经历垃圾回收,此时会重新放幸存者0区,接着再区形成云这1区。
6.什么时候能去养老区呢?可以设置次数,默认15次。
可以设置参数:-XX:MaxTenuringThreshold=进行设置。

总结:
1.针对幸存者s0,s1区:复制之后有交换,谁空谁to。
2.关于垃圾回收:频繁再新生区收集,很少再养老去收集,几乎不在永久区(元空间)收集。

在这里插入图片描述

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

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

相关文章

运行时数据区及程序计数器

运行时数据区 概述 运行时数据区&#xff0c;也就是下图这部分&#xff0c;它是在类加载完成后的阶段 当我们通过前面的&#xff1a;类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后&#xff0c;就会用到执行引擎对我们的类进行使用&#xff0c;同时…

记录Paint部分常用的方法

Paint部分常用的方法1、实例化之后Paint的基本配置2、shader 和 ShadowLayer3、pathEffect4、maskFilter5、colorFilter6、xfermode1、实例化之后Paint的基本配置 Paint.Align Align指定drawText如何将其文本相对于[x,y]坐标进行对齐。默认为LEFTPaint.Cap Cap指定了笔画线和路…

SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)

SpringBoot整合定时任务和邮件发送&#xff08;邮箱 信息轰炸 整蛊&#xff09; 目录SpringBoot整合定时任务和邮件发送&#xff08;邮箱 信息轰炸 整蛊&#xff09;1.概述2.最佳实践2.1创建项目引入依赖(mail)2.2 修改yml配置文件2.3 启动类添加EnableScheduling注解2.4 执行的…

设计模式(三)--适配器模式(Adapter Pattern)

将一个接口转换成客户希望的另一个接口&#xff0c;适配器模式使接口不兼容的那些类可以一起工作.比如我们日常开发中使用到的slf4j就使用了适配器模式&#xff0c;slf4j提供了一系列打日志的api,底层调用的是log4j或者logback来打日志&#xff0c;而作为调用者&#xff0c;不需…

C++基础(二)—— 类和对象(类的封装)、对象的构造和析构(浅拷贝、深拷贝、explicit、动态分配内存)

【上一篇】C基础&#xff08;一&#xff09;—— C概述、C对C的扩展(作用域、struct类型、引用、内联函数、函数默认参数、函数占位参数、函数重载)1. 类和对象的基本概念1.1 C和C中struct区别c语言struct只有变量c语言struct 既有变量&#xff0c;也有函数1.2 类的封装我们编写…

【建议收藏】超详细的Canal入门,看这篇就够了!!!

概述 canal是阿里巴巴旗下的一款开源项目&#xff0c;纯Java开发。基于数据库增量日志解析&#xff0c;提供增量数据订阅&消费&#xff0c;目前主要支持了MySQL&#xff08;也支持mariaDB&#xff09;。 背景 早期&#xff0c;阿里巴巴B2B公司因为存在杭州和美国双机房部…

Vue3 核心模块源码解析(中)

【Vue3 核心模块源码解析(上)】讲到了 Vue2 与 Vue3的一些区别&#xff0c;Vue3 新特性的使用&#xff0c;以及略微带了一点源码。那么这篇文章就要从Vue3 模块源码解析 与 Vue3 执行逻辑解析这两个方面去给大家剖析 Vue3 的深层次&#xff0c;一起学习起来吧&#xff01; 这里…

6.深入理解SecurityConfigurer

深入理解SecurityConfigurer 一、SecurityConfigurer SecurityConfigurer 在 Spring Security 中是一个非常重要的角色。在前面的内容中曾经多次提到过&#xff0c; Spring Security 过滤器链中的每一个过滤器&#xff0c;都是通过 xxxConfigurer 来进行配置的&#xff0c;而这…

文件跳过回收站删除了常见原因|找回方法

演示机型&#xff1a;技嘉 H310M HD22.0系统版本&#xff1a;Windows 10 专业版软件版本&#xff1a;云骑士数据恢复软件3.21.0.92你有没有遇到文件跳过回收站而直接删除的情况&#xff1f;如果有的话&#xff0c;你是知道是什么原因吗&#xff1f;文件跳过回收站删除了怎么办&…

【JavaScript速成之路】JavaScript数组

&#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f525;系列专栏&#xff1a;【JavaScript速成之路】 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 文章目录前言1&#xff0c;初识数组1.1&#xff0c;数组1.2&#xff0c;创建数组1.3&…

SCI期刊收不收费也有门道,你知道吗?

什么是OA期刊? OA期刊是在互联网上在线出版的学术刊物&#xff0c;英文全称是OpenAccess Journal&#xff0c;中文译为“开放存取期刊”。OA期刊不同于传统的学术期刊如《自然》、《科学》等&#xff0c;采取的是向读者收费的运营模式&#xff0c;读者只有付费订阅&#xff0…

【MySQL】表的数据处理

哈喽&#xff0c;大家好&#xff01;我是保护小周ღ&#xff0c;本期为大家带来的是 MySQL 数据表中数据的基本处理的操作&#xff0c;数据表的增删改查&#xff0c;更多相关知识敬请期待&#xff1a;保护小周ღ *★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★*一、 添加数据&a…

极简RSS订阅器Miniflux

什么是 Miniflux &#xff1f; Miniflux 是一个极简主义的 RSS 阅读器。它简单、快速、轻便且非常易于使用。Miniflux 是静态编译的单个二进制文件&#xff0c;没有使用任何复杂的框架&#xff0c;也没有外部依赖&#xff0c;简单、快速、轻巧且超级容易安装。支持 Atom、RSS 1…

Docker(五)--Docker网络--源生网络、自定义网络

文章目录一、源生网络1.docker 的网桥---bridge2.host网络模型3.none 网络模型二、自定义网络模型1.bridge驱动2.指定网关和子网3.自定义网络其中内嵌dns解析4.不同网段的容器通信一、源生网络 我们先把server7上的harbor仓库down掉&#xff0c;然后查看网络&#xff0c;可以看…

微服务导学

一、微服务导学1.1 对比单体架构与分布式架构单体架构将业务的所有功能集中再一个项目中开发&#xff0c;打成一个包部署。分布式架构缺点&#xff1a; 模块多导致部署麻烦&#xff1b;架构复杂&#xff0c;难度大1.2 微服务经过良好架构设计的分布式架构方案&#xff0c;微服务…

【Springboot系列】解析Springboot事件机制,从入门到大师

系列文章&#xff1a;Spring Boot学习大纲&#xff0c;可以留言自己想了解的技术点 继续写Springboot系列&#xff0c;争取早点结束。 1、是什么 Spring的事件&#xff08;Application Event&#xff09;为Bean与Bean之间的消息通信提供了支持 事件机制中有三种角色&#x…

RTOS中事件集的实现原理以及实用应用

事件集的原理 RTOS中事件集的实现原理是通过位掩码来实现的。事件集是一种用于在任务之间传递信号的机制。在RTOS中&#xff0c;事件集通常是一个32位的二进制位向量。每个位都代表一个特定的事件&#xff0c;例如信号、标志、定时器等。 当一个任务等待一个或多个事件时&…

Hbase备份与恢复工具Snapshot的基本概念与工作原理

数据库都有相对完善的备份与恢复功能。备份与恢复功能是数据库在数据意外丢失、损坏下的最后一根救命稻草。数据库定期备份、定期演练恢复是当下很多重要业务都在慢慢接受的最佳实践&#xff0c;也是数据库管理者推荐的一种管理规范。HBase数据库最核心的备份与恢复工具——Sna…

Spark+Vue+Springboot 协同过滤额音乐推荐大数据深度学习项目

一、项目背景 随着互联网的发展,大数据的到来,传统的音乐行业受到了很大的冲击,原有的音乐数字化给人们生活带来了极大的便利。随着数字音乐的兴起,各大音乐平台层出不穷,人们在音乐平台上收听音乐的时,常常因为歌曲信息繁杂,而不能找到自己想听的音乐。为了解决这个问题,音乐…

Elasticsearch:使用 Logstash 构建从 Kafka 到 Elasticsearch 的管道 - Nodejs

在我之前的文章 “Elastic&#xff1a;使用 Kafka 部署 Elastic Stack”&#xff0c;我构建了从 Beats > Kafka > Logstash > Elasticsearch 的管道。在今天的文章中&#xff0c;我将描述从 Nodejs > Kafka > Logstash > Elasticsearch 这样的一个数据流。在…