Java-List集合堆内存溢出

Java-List集合堆内存溢出

    • 情况一
    • 情况二
    • 对照分析
    • 对照规定堆内存

情况一

往List<Object>的集合中不断插入元素,集合底层的数组会不断扩容,从0 -> 10 -> 10 + 10>>1…。最终出现堆内存溢出,是在扩容数组大小的时候。这里的过程会比下面之间add(“1”)出现内存溢出的时间要长,但是容量比其要小。
说明Object的对象创建会占用一定的空间;数组里面存放执行堆的内存地址也是需要占用空间的;GC扫描这些对象所花的时间也长(-XX:+PrintGCDetails -Xms4g -Xmx4g -XX:NewRatio=4,可以看到不断有GC日志打印,加上jstat -gc pid查询GC的耗时,以及T线程出现内存溢出时,main线程出现异常等待的时间就是最近一次add触发GC的时间)。

public static void main(String[] args) {

	List<Object> list = new ArrayList<>();
	Thread thread = new Thread(() -> {
		synchronized (list) {
			while (true) {
				list.add(new Object());
			}
		}
	}, "T ");
	
	thread.start();
	try {
		Thread.sleep(100);
	} catch (InterruptedException e) {
		throw new RuntimeException(e);
	}
	Iterator<Object> iterator = list.iterator();
	while (iterator.hasNext()){
		if (!thread.isAlive()){
			System.out.println(list.size());
				break;
		}
	}
	list.add(new Object());
}

在这里插入图片描述

在这里插入图片描述

情况二

public static void main(String[] args) {

	List<Object> list = new ArrayList<>();
	Thread thread = new Thread(() -> {
		synchronized (list) {
			while (true) {
				list.add("1");
			}
		}
	}, "T ");
	
	thread.start();
	try {
		Thread.sleep(100);
	} catch (InterruptedException e) {
		throw new RuntimeException(e);
	}
	Iterator<Object> iterator = list.iterator();
	while (iterator.hasNext()){
		if (!thread.isAlive()){
			System.out.println(list.size());
				break;
		}
	}
	list.add("1");
}

在这里插入图片描述

在这里插入图片描述

对照分析

JVM启动参数:-Xms4g -Xmx4g -XX:NewRatio=4

public static void main(String[] args) {
	long start = System.currentTimeMillis();
	List<Object> list = new ArrayList<>();
	Thread thread = new Thread(() -> {
		synchronized (list) {
			while (true) {
				list.add(new Object());
			}
		}
		}, "T");
	thread.start();
	while (true) {
		if (!thread.isAlive()) {
        	System.out.println(System.currentTimeMillis() - start);
        	System.out.println(list.size());
        	break;
        }
	}
	list.add(new Object());
}

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

在这里插入图片描述
在指定大小足够大的情况下时,同样的启动参数,为什么GC次数少但是耗时更长?
但是用另外一台电脑,后者速度会更快一点,为什么?
程序运行久,在后面真正耗时的是GC的时间,耗时75秒,总GC将近74秒。

对照规定堆内存

-XX:+PrintGCDetails -Xms1g -Xmx1g -XX:NewRatio=10 -XX:-UseAdaptiveSizePolicy
在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Next.js 实战 (一):项目搭建指南

前言 时间过得好快&#xff0c;一下就来到2024下半年了。 上半年我为了学习 Nuxt3&#xff0c;从 0 到 1 开发了一个导航网站&#xff1a;Dream Site&#xff0c;目前主要的功能都已完成了&#xff0c;后续有时间再慢慢添加有趣的功能。 下半年开始进攻 Next.js&#xff0c;…

MES系统如何进行数据采集?

在现代化制造业中&#xff0c;MES系统扮演着至关重要的角色。其中&#xff0c;对生产设备进行数据采集是MES系统不可或缺的一部分。数据采集不仅能够实时监控设备的运行状态&#xff0c;还能提供准确的生产数据&#xff0c;帮助企业实现精细化管理和优化生产流程。 通过实时采…

水利水电安全员C证考试题库资料,2024年全国考试通用!

1.安全生产民事责任&#xff0c;是指责任主体违反安全生产法律规定造成&#xff08;&#xff09;&#xff0c;由人民法院依照民事法律强制其行使民事赔偿的一种法律责任。民事责任追究的目的是为了最大限度的维护当事人受到民事损害时享有获得民事赔偿的权利。 A.民事损伤 B.…

如何检查购买的Facebook账号优劣?

Facebook 是全球最受欢迎的社交网络之一,为品牌广告提供了巨大的潜力。许多公司和营销人员使用 Facebook 来推广他们的产品和服务&#xff0c;经常会购买账号。当然也分出了很多账号&#xff0c;比如个人号&#xff0c;BM号&#xff0c;广告号&#xff0c;小黑号等等。 但是,有…

【Arduino】ESP8266开发环境配置(图文)

ESP8266与ESP32开发很类似&#xff0c;相当于是低配版本的ESP32&#xff0c;其同样具有无线网络连接能力&#xff0c;功能强大&#xff0c;而且价格比ESP32更具有优势。接下来我们就来设置一下ESP8266的开发环境。 使用Arduino开发平台软件&#xff0c;选择首选项进行设置。 h…

DVWA sql手注学习(巨详细不含sqlmap)

这篇文章主要记录学习sql注入的过程中遇到的问题已经一点学习感悟&#xff0c;过程图片会比较多&#xff0c;比较基础和详细&#xff0c;不存在看不懂哪一步的过程 文章目录 靶场介绍SQL注入 lowSQL注入 MediumSQL注入 HighSQL注入 Impossible 靶场介绍 DVWA&#xff08;Damn…

YUV 颜色编码详解

YUV 简介 YUV是被欧洲电视系统所采用的一种颜色编码方法&#xff08;属于PAL&#xff09;&#xff0c;是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中&#xff0c;通常采用三管彩色摄影机或彩色CCD摄影机进行取像&#xff0c;然后把取得的彩色图像信号经分…

硬件开发笔记(二十三):贴片电阻的类别、封装介绍,AD21导入贴片电阻原理图封装库3D模型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140110514 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

ConsiStory:无需训练的一致性文本到图像生成技术

随着大规模文本到图像&#xff08;T2I&#xff09;扩散模型的发展&#xff0c;用户可以更自由地通过文本指导图像生成过程。然而&#xff0c;要在不同的提示中保持同一主题的视觉一致性仍然是一个挑战。现有的方法通常需要对模型进行微调或预训练&#xff0c;以教授新词汇来描述…

arthas命令使用

dashboard(线程、内存等环境概览) jvm&#xff08;JVM相关信息概览&#xff09; 1、RUNTIME&#xff08;系统运行环境JVM相关信息&#xff0c;运行时长等&#xff09; 2、CLASS-LOADING&#xff08;类加载信息&#xff09; 3、 COMPILATION&#xff08;编译信息&#xff09; 4…

论文学习——基于类型检测的动态自适应多目标优化算法

论文题目&#xff1a;Dynamic adaptive multi-objective optimization algorithm based on type detection 基于类型检测的动态自适应多目标优化算法&#xff08;Xingjuan Cai a,b, Linjie Wu a,∗, Tianhao Zhao a, Di Wu c, Wensheng Zhang d, Jinjun Chen e&#xff09;Inf…

Spring启动时,将SpringContext设置到Util中(SpringContextUtil)

场景 在Spring应用开发中&#xff0c;为简化代码或者在静态方法中获取Spring应用的上下文&#xff0c;需要把SpringContext设置到类属性上。经过对源码的分析和实践&#xff0c;使用Spring的事件监听器监听ApplicationPreparedEvent事件是最佳的方式。 通过ApplicationPrepar…

深入理解 Git `git add -p` 命令中的交互选项

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

git使用遇到的问题记录

文章目录 1. 记录以下问题*error: RPC failed; HTTP 307 curl 22 The requested URL returned error: 307* 1. 记录以下问题 error: RPC failed; HTTP 307 curl 22 The requested URL returned error: 307 第一种&#xff1a;clone的仓库地址或者账户密码发生改变&#xff1b;…

Python学习篇:Python基础知识(三)

目录 1 Python保留字 2 注释 3 行与缩进 ​编辑4 多行语句 5 输入和输出 6 变量 7 数据类型 8 类型转换 9 表达式 10 运算符 1 Python保留字 Python保留字&#xff08;也称为关键字&#xff09;是Python编程语言中预定义的、具有特殊含义的标识符。这些保留字不能用作…

商务视频推广8个增加用户转化率的技巧-华媒舍

商务视频推广是一种有效的营销策略&#xff0c;可以帮助企业吸引更多的潜在客户并增加用户转化率。我们将介绍8个提高商务视频推广效果的技巧&#xff0c;帮助您更好地利用视频来促进业务增长。 技巧一&#xff1a;制作高质量的内容 成功的商务视频推广首先要有高质量的内容。…

Web3 开发者入门手册:技能、工具和职业前景

原文&#xff1a;https://remote3.co/blog-post/how-to-become-a-web3-developer 作者&#xff1a;Paul Anderson 编译&#xff1a;TinTinLand Web3 是 2024 年科技领域最受瞩目的话题之一——Web3 令人激动的实用潜力可以跨越多个行业&#xff0c;早期采用者更有机会在未来…

iOS手机竖着拍的照片被旋转了90°的原因以及解决方案

EXIF.getData(IMG_FILE, function () { // IMG_FILE为图像数据 var orientation EXIF.getTag(this, “Orientation”); console.log(“Orientation:” orientation); // 拍照方向 }); 获取拍照方向的结果为1-8的数字&#xff1a; 注意&#xff1a;对于上面的八种方向中&a…

nginx的重定向(rewrite)

nginx的重定向&#xff08;rewrite&#xff09; location 匹配 location匹配的就是后面的URI /wordpress 192.168.60.20/wordpress location匹配的分类和优先级 1、精确匹配 location / 对字符串进行完全匹配&#xff0c;必须完全符合 2、正则匹配 ^~ 前缀匹配&#x…