【JVM】生产内存占用异常优化 (一)

记录一次 - 内存占用优化

某个导出,导出数据量过大总是导致OOM,但是根据需求,导出数据大小并没有那么大

按照导出数据的查询来看

 SELECTg.inventory_code,g.visit_record_code,g.recovery_price AS transactionAmount
FROM
crm_goods g
...
...

三个字段大小预计大小100W数据应该是不大于100m的,但是现实是1个G都不够用,果断开启MAT,查看最大对象如下
在这里插入图片描述
震惊,100w个单纯对象声明,竟然占用了1.3GB内存,于是我测试了一下原对象全部字段和单纯查询三个字段声明100W个的差距

		ArrayList<VisitGoodsInfoResp> visitGoodsInfoResps = new ArrayList<>(1000000);ArrayList<VisitGoodsInfoExport> visitGoodsInfoExports = new ArrayList<>(1000000);for (int i = 0; i < 1000000; i++) {VisitGoodsInfoResp visitGoodsInfoResp1 = new VisitGoodsInfoResp();visitGoodsInfoResps.add(visitGoodsInfoResp1);VisitGoodsInfoExport visitGoodsInfoExport1 = new VisitGoodsInfoExport();visitGoodsInfoExports.add(visitGoodsInfoExport1);}

MAT分析如下
在这里插入图片描述

两个竟然差距如此之大,我们使用jol工具看下两个对象的差距

com.VisitGoodsInfoResp object internals:OFFSET  SIZE                      TYPE DESCRIPTION                                          VALUE0     4                           (object header)                                      01 00 00 00 (00000001 00000000 00000000 00000000) (1)4     4                           (object header)                                      00 00 00 00 (00000000 00000000 00000000 00000000) (0)8     4                           (object header)                                      05 c2 00 f8 (00000101 11000010 00000000 11111000) (-134168059)12     4          java.lang.String VisitGoodsInfoResp.inventoryCode                     null16     4          java.lang.String VisitGoodsInfoResp.name                              null...... 省略N个字段...652     4          java.lang.String VisitGoodsInfoResp.dockingCustomerDeptName           null656     4   java.time.LocalDateTime VisitGoodsInfoResp.registrationTime                  null660     4      java.math.BigDecimal VisitGoodsInfoResp.salesTransitCount                 null
Instance size: 664 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes totalcom.VisitGoodsInfoExport object internals:OFFSET  SIZE                   TYPE DESCRIPTION                               VALUE0     4                        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)4     4                        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)8     4                        (object header)                           8b c3 00 f8 (10001011 11000011 00000000 11111000) (-134167669)12     4       java.lang.String VisitGoodsInfoExport.inventoryCode        null16     4   java.math.BigDecimal VisitGoodsInfoExport.transactionAmount    null20     4       java.lang.String VisitGoodsInfoExport.visitRecordCode      null
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total

可以看出一个声明为24bytes一个为664bytes,这个还是开启了指针压缩的,若是堆栈内存超过32GB,无法施行压缩,则会多占用更多内存。由此可见,虽然java已经很大限度的帮我们管理内存,但是在编程过程中涉及到大数据梁的时候还是要有对应的空间意识的。

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

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

相关文章

小迪安全41WEB 攻防-通用漏洞XMLXXE无回显DTD 实体伪协议代码审计

#知识点&#xff1a; 1、XML&XXE-原理&发现&利用&修复等 2、XML&XXE-黑盒模式下的发现与利用 3、XML&XXE-白盒模式下的审计与利用 4、XML&XXE-无回显&伪协议&产生层面 #思路点&#xff1a; 参考&#xff1a;https://www.cnblo…

Linux 块设备驱动

Linux 三大驱动分别是&#xff1a;字符设备驱动、块设备驱动、网络设备驱动。 块设备是针对存储设备的&#xff0c;比如 SD 卡、EMMC、NAND Flash、Nor Flash、SPI Flash、机械硬盘、固态硬盘等。因此块设备驱动其实就是这些存储设备驱动&#xff0c;块设备驱动相比字符设备驱…

CentOS 7 编译安装 Git

CentOS 7 编译安装 Git 背景来源删除旧版本 Git安装依赖包下载 Git 源代码检验相关依赖&#xff0c;设置安装路径编译安装添加 Git 环境变量重新加载配置文件查看版本号参考文献 背景来源 为什么要安装新版本呢&#xff1f; 因为无聊&#xff0c;哈哈哈&#xff0c;其实也不是…

Linux下进程的调度与切换

&#x1f30e;进程的调度与切换 文章目录&#xff1a; 进程的调度与切换 进程切换 进程调度       活动状态进程队列       位图判断       过期队列 总结 前言&#xff1a; 在Linux操作系统中&#xff0c;进程的调度与切换是操作系统核心功能之一&#xff…

【JACS】:用于稳定单原子分散的催化剂架构可对吸附到 Pt 原子、氧化 Pt 簇和 TiO2上金属 Pt 簇的 CO 进行特定位点光谱和反应性测量

摘要&#xff1a;氧化物负载的贵金属纳米粒子是广泛使用的工业催化剂。由于费用和稀有性&#xff0c;开发降低贵金属纳米颗粒尺寸并稳定分散物质的合成方案至关重要。负载型原子分散的单贵金属原子代表了最有效的金属利用几何结构&#xff0c;尽管由于合成均匀且稳定的单原子分…

《论文阅读》E-CORE:情感相关性增强的移情对话生成 EMNLP 2023

《论文阅读》E-CORE:情感相关性增强的移情对话生成 EMNLP 2023 前言摘要模型架构图构建边的构建和初始化节点的初始化图更新情感相关性加强解码损失函数总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来…

2.3 性能度量

目录 2.3.1 错误路和精度 2.3.2 查准率&#xff0c;查全率与F1 2.3.4 代价敏感错误率与代价曲线 对学习器的泛化性能进行评估&#xff0c;不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure).性能度量反映了任务需求,…

uwsgi+nginx+django 部署学习

收集静态文件及部署配置 DEBUG False STATICFILES_DIRS [os.path.join(BASE_DIR, "static"), ] STATIC_ROOT /data/static python3 manage.py collectstatic 收集静态文件&#xff0c;成功后可在STATIC_ROOT目录查看 安装依赖 pip3 install uwsgi django项目结…

粤嵌6818开发板通过MobaXterm使用SSH连接开发板

链接&#xff1a;https://pan.baidu.com/s/18ISP4Ub1HtQx6jCvTQTUHw?pwdfjmu 提取码&#xff1a;fjmu 1.把SSH_config.tar.bz 下载到开发板中 2.解压 SSH_config.tar.bz 解压命令&#xff1a;tar -xzvf SSH_config.tar.bz 3.配置SSH 进入SSH/openssh目录&am…

Python二级备考(1)考纲+基础操作

考试大纲如下&#xff1a; 基本要求 考试内容 考试方式 比较希望能直接刷题&#xff0c;因为不懂的比较多可能会看视频。 基础操作刷题&#xff1a; 知乎大头计算机1-13题 import jieba txtinput() lsjieba.lcut(txt) print("{:.1f}".format(len(txt)/len(ls)…

鸿蒙Next 支持数据双向绑定的组件:Checkbox--Search--TextInput

Checkbox $$语法&#xff0c;$$绑定的变量发生变化时&#xff0c;会触发UI的刷新 Entry Component struct MvvmCase { State isMarry:boolean falseStatesearchText:string build() {Grid(){GridItem(){Column(){Text("checkbox 的双向绑定")Checkbox().select($$…

【GPT-SOVITS-04】SOVITS 模块-鉴别模型解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

机器学习_线性回归

文章目录 线性回归的定义损失函数(误差大小)梯度下降算法梯度下降的API(LinearRegression)均方误差(Mean Squared Error)MSE) 评价机制最小二乘法之正规方程正规方程vs梯度下降 欠拟合与过拟合回归算法之岭回归L2正则化 线性回归的定义 线性回归的定义是&#xff1a;目标值预期…

html5cssjs代码 022 表单输入类型示例

html5&css&js代码 022 表单输入类型示例 一、代码二、解释 这段HTML代码定义了一个网页&#xff0c;展示了表单输入类型示例。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><title>编程笔记 html5&css&js 表单输入…

短剧小程序软件开发首页接口转发到Selectpage

工具&#xff1a;用的是uniapp开发 技术栈&#xff1a;vue、nide..js、云开发 用时&#xff1a;20工作天 软件&#xff1a;Hb、微信开发者工具 <?php namespace app\api\controller; use app\common\controller\Api; /** * 首页接口 */ class Index extends Api { …

pytorch卸载cuda+cudnn并重新配置GPU环境,亲测有效

pytorch卸载cudacudnn 一、卸载cuda 进入【控制面板】&#xff0c;点击【卸载程序】 将红色框中带版本号的都卸载 二、删除cudnn配置 1、进入安装路径 将以下版本号文件直接删除 pytorch配置GPU环境 一、查看支持的cuda最高版本 1、winr&#xff0c;输入cmd&#xf…

【开源】SpringBoot框架开发二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

单片机原理

AT89S51单片机片内硬件结构 &#xff08; 本节以AT89S51为例介绍51单片机的基本结构&#xff0c;如下图所示&#xff09; AT89S51单片机的片内结构&#xff0c;从图中可见 AT89S51单片机的基本组成&#xff1a; 1. CPU&#xff1a;8位的CPU 由控制器和运算器构成 2. 数据存…

【Frida】04_Frida中使用TypeScript脚本(采坑)

▒ 目录 ▒ &#x1f6eb; 导读需求开发环境演示目标 1️⃣ 操作步骤安装node 20.10.0在 VSCode 中打开项目目录初始化一个 NodeJS 项目安装 TypeScript初始化 TypeScript 项目安装依赖配置 TypeScript编写代码编译设置编译脚本运行&#xff0c;查看结果 2️⃣ 采坑frida-compi…

WEB前端项目开发——(一)(2024)

目录 1 通过Git Bash安装 vue-cli 2 创建项目 3 解决Git Bash方向键失效 4 重新进行项目创建 5 浏览器输入地址查看 6 案例——简单修改v3-calendar中的内容 7 测试页面效果 本篇文章介绍通过了Git Bash创建v3-calendar项目&#xff0c;之后对v3-calendar进行简单…