【JVM基础03】——组成-详细介绍下Java中的堆

news2024/9/22 9:52:34

目录

  • 1- 引言:堆
    • 1-1 堆是什么?(What)
    • 1-2 为什么用堆?堆的作用 (Why)
  • 2- ⭐核心:堆的原理(How)
    • 2-1 堆的划分
    • 2-2 Java 7 与 Java 8 的堆区别
  • 3- 小结:
    • 3-1 详细介绍下Java的堆?
    • 3-2 JVM 中的堆是如何划分的?
    • 3-3 Java 7 与 Java 8 的堆区别?


1- 引言:堆

1-1 堆是什么?(What)

  • 堆是线程共享的区域: 主要用来保存 对象实例数组 等,当堆中没 等,当堆中没有内存空间可分配给实例,也无法再扩展时,则抛出 OutOfMemory异常。

1-2 为什么用堆?堆的作用 (Why)

  • 1. 存储对象实例和数组:堆主要用于存储对象实例和数组,这些对象实例和数组可以在程序运行时动态分配内存。
  • 2. 支持垃圾回收:堆内存的管理支持垃圾回收机制,自动释放不再使用的对象,从而提高内存使用效率,减少内存泄漏风险。
  • 3. 线程共享:堆是所有线程共享的内存区域,使得对象可以在不同线程之间共享和传递,支持多线程编程。
  • 4. 灵活性和扩展性:堆内存可以根据程序运行时的需求动态扩展,适应不同应用的内存需求,避免因静态分配导致的内存浪费或不足。
  • 5. 方法区(元空间)的支持:堆包含方法区(在Java 8中为元空间),存储类信息、静态变量、常量池和编译后的代码,有助于类加载和运行时动态特性。
  • 6. 生命周期管理:通过年轻代和老年代的划分,堆能够有效管理对象的生命周期,提高垃圾回收的效率。

2- ⭐核心:堆的原理(How)

2-1 堆的划分

  • 堆总体上分为 年轻代老年代
    • 年轻代中堆又分为了 3 部分:Eden 区和两个大小严格相同的 Survivor 区,根据 JVM 的策略,在经过几次垃圾收集后,任然存活于 Survivor 的对象被移动到老年代区。
    • 老年代:主要保存生命周期长的对象,一般是一些老的对象。

image.png

  • 元空间:保存类的信息、静态变量、常量、编译后的代码。

2-2 Java 7 与 Java 8 的堆区别

  1. 方法区与元空间的变化
  • Java 7:堆中包含一个叫做 方法区(也称为永久代),用于存储类信息、静态变量、常量和编译后的代码。
  • Java 8方法区(Method Area)的概念依然存在,但它的实现方式发生了变化。永久代(PermGen)被移除,替换为元空间(Metaspace),元空间使用本地内存来存储类的元数据。
  1. 内存管理优化
  • Java 7永久代 的大小是固定的,需要手动调整,容易因设置不当导致内存溢出(OutOfMemoryError, OOM)。
  • Java 8元空间 动态扩展,减少了内存溢出的风险。将元空间放入本地内存中,使堆的空间更大,更灵活。

image.png


3- 小结:

3-1 详细介绍下Java的堆?

在这里插入图片描述

3-2 JVM 中的堆是如何划分的?

在这里插入图片描述

3-3 Java 7 与 Java 8 的堆区别?

在这里插入图片描述


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

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

相关文章

【转盘案例-弹框-修改Bug-完成 Objective-C语言】

一、我们来看示例程序啊 1.旋转完了以后,它会弹一个框,这个框,是啥, Alert 啊,AlertView 也行, AlertView,跟大家说过,是吧,演示过的啊,然后,我们就用iOS9来做了啊,完成了以后,我们要去弹一个框, // 弹框 UIAlertController *alertController = [UIAlertContr…

CI/CD的node.js编译报错npm ERR! network request to https://registry.npmjs.org/

1、背景: 在维护paas云平台过程中,有研发反馈paas云平台上的CI/CD的前端流水线执行异常。 2、问题描述: 流水线执行的是前端编译,使用的是node.js环境。报错内容如下: 2024-07-18T01:23:04.203585287Z npm ERR! code E…

源码分析SpringCloud Gateway如何加载断言(predicates)与过滤器(filters)

我们今天的主角是Gateway网关,一听名字就知道它基本的任务就是去分发路由。根据不同的指定名称去请求各个服务,下面是Gateway官方的解释: Spring Cloud Gateway,其他的博主就不多说了,大家多去官网看看,只…

HarmonyOS NEXT零基础入门到实战-第一部分

构建节页面思路: 1、排版 (分析布局) 2、内容(基础组件) 3、美化(属性方法) 设计资源-svg图标 界面中展示图标 ->可以使用svg图标(任意放大缩小不失真,可以改颜色) 使用方式&a…

Re-labeling ImageNet(CVPR 2021, Naver)

paper:Re-labeling ImageNet: from Single to Multi-Labels, from Global to Localized Labels official implementation:GitHub - naver-ai/relabel_imagenet 背景 ImageNet 数据集是现代计算机视觉领域的重要基准,广泛用于图像分类模型的…

低代码中间件学习体验分享:业务系统的创新引擎

前言 星云低代码平台介绍 星云低代码中间件主要面向企业IT部门、软件实施部门的低代码开发平台,无需学习开发语言/技术框架,可视化开发PC网页/PC项目/小程序/安卓/IOS原生移动应用,低门槛,高效率。针对企业研发部门人员少&#…

从0到1搭建数据中台(4):neo4j初识及安装使用

在数据中台中,neo4j作为图数据库,可以用于数据血缘关系的存储 图数据库的其他用于主要用于知识图谱,人物关系的搭建,描述实体,关系,以及实体属性 安装 在官网 https://neo4j.com/ 下载安装包 neo4j-co…

【jenkins+cmake+svn管理c++项目】msbuild: command not found

一、前言 jenkins中配置cmakeVS的编译构建过程,需要用到MSBuild这个工具来完成VS工作,MSBuild的安装配置方法见:windows编译环境和工具配置 MSBuildCMAKE的编译可以用脚本来完成,我在jenkins的构建步骤中添加了一个ExecuteShell…

Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: HadoopHDFSMapReduceHiveFlumeSqoopZookeeperHBase 正在 章节内容 上一节我们完成了: 集群的…

解决:Linux上SVN 1.12版本以上无法直接存储明文密码

问题:今天在Linux机器上安装了SVN,作为客户端使用,首次执行SVN相关操作,输入账号密码信息后,后面再执行SVN相关操作(比如"svn update")还是每次都需要输入密码。 回想以前在首次输入…

Visual Studio Code 实现远程开发

Background 远程开发是指开发人员在本地计算机上进行编码、调试和测试,但实际的开发环境、代码库或应用程序运行在远程服务器上。远程开发的实现方式多种多样,包括通过SSH连接到远程服务器、使用远程桌面软件、或者利用云开发环境等。这里我们是使用VSCo…

Vue封装文件上传组件(支持图片、PDF、Excel、word预览下载)

一、准备工作 安装预览依赖包&#xff1a;exceljs、mammoth、vue-pdf 二、封装组件 文件上传组件 fileUploadPro.vue。默认预览、下载是true,可通过isPreView、isDownLoad控制 <template><div style"display: flex"><el-uploadmultipleaction&qu…

BUUCTF逆向wp [MRCTF2020]Transform

第一步 查壳。该题为64位。 第二步 进入主函数&#xff0c;跟进dword_40F040,它应该与关键字符串有关 分析一下&#xff1a; 初始化和输入 sub_402230(argc, argv, envp); 这行可能是一个初始化函数&#xff0c;用于设置程序环境或处理命令行参数。具体功能不明&#xff0c…

不同业务场景下通过mars3d实现绕点旋转效果

1.鼠标单击地图某一处就对该点进行绕点旋转效果 相关代码&#xff1a; 1.相关绕点旋转的初始化代码&#xff1a; const rotatePoint new mars3d.thing.RotatePoint({direction: false, // 方向 true逆时针&#xff0c;false顺时针time: 50 // 给定飞行一周所需时间(单位 秒)&…

神经网络中如何优化模型和超参数调优(案例为tensor的预测)

总结&#xff1a; 初级&#xff1a;简单修改一下超参数&#xff0c;效果一般般但是够用&#xff0c;有时候甚至直接不够用 中级&#xff1a;optuna得出最好的超参数之后&#xff0c;再多一些epoch让train和testloss整体下降&#xff0c;然后结果就很不错。 高级&#xff1a;…

使用Docker 实现 MySQL 循环复制(三)

系列文章 使用Docker 实现 MySQL 循环复制&#xff08;一&#xff09; 使用Docker 实现 MySQL 循环复制&#xff08;二&#xff09; 目录 系列文章1. 在主机上安装MySQL客户端2. 配置循环复制拓扑2.1 进入容器2.2 创建复制用户并授予复制权限2.3 复位二进制日志2.4 配置环形复…

Jenkins-zookeeper-docker-xxljob-rancher

文章目录 Jenkins实战1 新建任务需要的配置pipeline Zookeeper基础 Docker基础实操windows11 docker mysql DockerhouseDockerhubxxl-Job基础实战 Rancher基础思考 实战1 Rancher的某个namespace的scale为0 Jenkins 实战 1 新建任务需要的配置pipeline 该代码是Jenkinsfile&…

【Docker】基于Docker-compose创建LNMP环境

目录 一.Docker-compose 概述 1.容器编排管理与传统的容器管理的区别 2.docker-compose 作用 3.docker-compose 本质 4.docker-compose 的三大概念 二.YML文件格式及编写注意事项 1.yml文件是什么 2.yml问价使用注意事项 3.yml文件的基本数据结构 三.Docker-compose …

5G以太网和5G前传业务的有效解决方案——25G可调DWDM光模块

信息技术的迅猛发展和数据传输需求的不断增加&#xff0c;光通信技术在现代网络中扮演着至关重要的角色。DWDM技术通过在一根光纤上使用多个不同波长的光信号同时传输&#xff0c;大幅提高了数据传输的容量。而可调光模块则能够在多种波长之间进行切换&#xff0c;实现灵活、高…

如何用EXCEL自动解方程/方程组?利用 矩阵乘法X=A-*B,X=mmult(minverse(A), B)

目录 问题的由来 1 数据 → 模拟分析 → 单变量求解 1.1 找一个单元格填入公式 1.2 功能入口 1.3 选择单变量求解&#xff0c;分别填入内容 1.4 求解 1.5 这个感觉用处不大 2 重点介绍&#xff0c;用EXCEL进行矩阵运算解方程的操作 2.1 运用EXCEL进行矩阵运算&…