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

JAVA面试题整理——内存溢出与内存泄露的区别与联系

内存溢出与内存泄露的区别与联系
在前面jvm学习整理的时候其实用过一个简单的例子了解过内存溢出,在jvm内存模型章节下,大家有兴趣的可以去看看:JVM初学 GC_knowwait的博客-CSDN博客

内存溢出
内存溢出(out of memory)顾名思义,就是程序申请内存时,没用足够的内存可以使用,假设我们程序运行需要100M内存,但是我们的内存空间只剩下10M,那我们程序肯定运行不起来,这就是内存溢出了,这种一般指元空间溢出。

不过通常情况下,我们程序运行使用的是系统内存,一般不会出现内存不足以支撑程序运行的情况,那为什么还会出现内存溢出呢?这种溢出就是我们在程序开发时遇到的堆溢出了。

我们知道,我们创建的对象是放在堆中的,通常我们通过设置-Xms和-Xmx参数来调整堆内存大小,但是我们不能无限调整其大小,也就是说我们不能无限创建对象,或者说我们创建的对象在不用时要及时的释放(GC),才能满足程序不断运行的需要。假如我们一直在new对象,却不释放内存空间,这时候内存占满了,也就出现内存溢出了,这通常是因为代码原因导致的,例如:

1、代码中存在死循环或者递归调用没有出口

2、大循环重复产生大量新对象实体。

3、数据库一次性查询数据条数过多,导致内存中加载的数据量过于庞大。

4、检查List、Map等集合对象是否有使用完后,未清除的问题,List、Map等集合对象会始终存有对对象的引用。

内存泄露
讲完了内存溢出,我们再来看看内存泄露,其实依我拙见,我们只要清楚的了解内存溢出就可以了,所以我面试的时候也并没有答出来内存泄露是啥,但是既然面试问了,我们还是要了解一下。

内存泄露(Memory Leak)就是我们程序运行中漏掉了一部分内存,那这部分内存怎么漏掉的呢,其实就是我们没有及时的释放掉一些不用的内存空间,举个例子:声明了一个A对象,占用内存空间1M,A对象已经用完了,对于我们程序来说A已经没有意义了,如果我们没有及时的释放掉A的内存,那这1M我们就不可能在后续利用起来,看起来就像这部分内存泄露了一样。

内存泄露对我们程序影响大么?

按照上面的例子,好像只是漏掉了一部分内存,不影响程序的使用,但是这个内存泄露其实是一个累积的过程,这里漏一块那里漏一块,最终内存不够用了,造成了什么现象?就是内存溢出,所以这就串起来了。

内存泄露的几种情况:

1、静态集合类

上述提到List、Map等集合对象会始终存有对对象的引用,如果这些集合是静态(static)的,那么它们的生命周期与JVM程序一致,那集合中的对象在程序结束之前将不能被释放,造成内存泄露。

2、单例模式

和静态集合类似,它的生命周期也与JVM程序一致,如果单例对象持有外部对象的引用,那么这个外部对象也不会被回收,那么就会造成内存泄漏。

3、各种连接,如数据库连接、网络连接和IO连接等

这些连接创建后,创建的连接对象,只有关闭连接后垃圾回收器才会回收这部分内存,如果使用完未关闭,一直占用内存也会造成内存泄露。

当然还有其他的情况,大家有兴趣的可以再翻翻资料了解下,对于面试来说,我认为这些足够了。

ps:内存泄漏的累积会造成内存溢出,所以内存泄露也根据触发的频繁程度做了一个分类:
经常发生: 发生内存泄露的代码会被多次执行,每次执行,泄露一块内存
偶然发生: 在某些特定情况下才会发生
一次性: 发生内存泄露的方法只会执行一次
隐式泄漏: 一直占着内存不释放,直到执行结束; 严格的说这个不算内存泄漏,因为最终释放掉了, 但是如果执行时间特别长,也可能会导致内存耗尽

相关文章:

JAVA面试题整理——内存溢出与内存泄露的区别与联系

内存溢出与内存泄露的区别与联系 在前面jvm学习整理的时候其实用过一个简单的例子了解过内存溢出,在jvm内存模型章节下,大家有兴趣的可以去看看:JVM初学 GC_knowwait的博客-CSDN博客 内存溢出 内存溢出(out of memory&#xff09…...

L50--- 104. 二叉树的最大深度(深搜)---Java版

1.题目描述 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 2.思路 这个二叉树的结构如下: 根节点 1 左子节点 2 右子节点 3 左子节点 4 计算过程 从根节点 1 开始计算: 计算左子树的最大深度: 根节点 2&#xf…...

Linux 中 “ 磁盘、进程和内存 ” 的管理

在linux虚拟机中也有磁盘、进程、内存的存在。第一步了解一下磁盘 一、磁盘管理 (1.1)磁盘了解 track( 磁道 ) :就是磁盘上的同心圆,从外向里,依次排序1号,2号磁盘........等等。…...

test_pipeline

test_pipeline 是一个测试管道(test pipeline)的定义。 在计算机视觉任务中,通常需要对输入图像进行一系列的预处理操作,以便将其适配到模型的输入要求或提高模型的性能。测试管道就是用于定义这些预处理操作的一系列步骤。 在给…...

使用甲骨文云arm服务器安装宝塔时nginx无法卸载

使用甲骨文云arm服务器安装宝塔 其他环境都能安装上 唯独nginx安装完不运行 卸载了几次以后还无法卸载了. 修复 重启都不行. 差点就重建主机了. 最后靠下面的命令 就卸载掉了 然后重装就把nginx安装好了 mv /www/server/nginx/sbin/nginx /tmp/nginx_back mv /etc/in…...

C++青少年简明教程:C++的指针入门

C青少年简明教程:C的指针入门 说到指针,就不可能脱离开内存。了解C的指针对于初学者来说可能有些复杂,我们可以试着以一种简单、形象且易于理解的方式来解释: 首先,我们可以将计算机内存想象成一个巨大的有许多格子的…...

Apache Doris 基础 -- 数据表设计(分层存储)

1、应用场景 未来一个重要的用例是类似于ES日志存储,其中日志场景中的数据是根据日期分割的。许多数据都是查询不频繁的冷数据,因此需要降低此类数据的存储成本。考虑到节约成本: 来自不同厂商的常规云磁盘的定价比对象存储更昂贵。Doris 集群实际在线…...

使用Spring Boot设计一套BI系统

商业智能(Business Intelligence,简称BI)系统是一种将数据转化为可操作信息,帮助企业进行决策支持的技术与工具的集合。随着大数据时代的到来,BI系统在企业中的应用变得越来越广泛。本文旨在探讨如何使用Spring Boot框…...

2024.6.12总结

今天是排毕业照的日子,拍照的时候并没有太过兴奋。后来受到主管说明天就能签offer了,这才喜极而泣。 自从得知自己面试通过后,我是非常高兴,开始幻想着今后的生活。可是,后面在等offer的过程中,我是无比的…...

1027 - 求任意三位数各个数位上数字的和

问题描述 对于一个任意的三位自然数 x ,编程计算其各个数位上的数字之和 S 。 输入 输入一行,只有一个整数 x(100≤x≤999) 。 输出 输出只有一行,包括 1 个整数。 样例 输入 123 输出 6 以下是C实现的代码: 代码1 #…...

K8s 卷快照类

卷快照类 卷快照类 这个警告信息通常出现在使用 kubectl 删除 Kubernetes 集群资源时,如果尝试删除的是集群作用域(cluster-scoped)的资源,但指定了命名空间(namespace),就会出现这个警告。 集…...

从零手写实现 nginx-23-directive IF 条件判断指令

前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …...

08_基于GAN实现人脸图像超分辨率重建实战_超分辨基础理论

1. 超分辨的概念与应用 我们常说的图像分辨率指的是图像长边像素数与图像短边像素数的乘积,比如iPhoneX手机拍摄照片的分辨率为 4032px3024px,为1200万像素。 显然,越高的分辨率能获得更清晰的成像。与之同时,分辨率越高也意味着更大的存储空间,对于空间非常有限的移动设…...

React.ReactElement 与 React.ReactNode

React.ReactNode 在 JSX 中作为子元素传递的所有可能类型的并集&#xff0c;这是对子元素的一个非常宽泛的定义。 <RNode><p>One element</p></RNode><RNode><><p>Fragments for</p><p>More elements</p></&g…...

深度解析服务发布策略之蓝绿发布

目录 什么是蓝绿发布 蓝绿发布的优点 蓝绿发布的缺点 蓝绿发布的实现步骤 小结 在软件开发和运维中&#xff0c;发布新版本是一个风险较高的操作。为了降低风险&#xff0c;提高发布的稳定性和可靠性&#xff0c;通常会采取一系列的技术策略。其中蓝绿发布&#xff08;Blu…...

【Mysql】 深入理解MySQL的执行计划

文章目录 前言一、字段解释二、代码实现三、总结 前言 在日常的数据库操作中&#xff0c;我们经常会遇到一些复杂的查询&#xff0c;这些查询可能会涉及到多个表的联合查询&#xff0c;或者是一些复杂的条件筛选。为了更好地理解和优化这些查询&#xff0c;了解MySQL的执行计划…...

说下你对Spring IOC 的理解

说下你对Spring IOC 的理解 1. Spring IOC是一个管理对象之间依赖关系的容器&#xff0c;它实现了依赖注入技术&#xff0c;可以解决传统的紧耦合问题&#xff0c;降低了项目维护难度。 2. Spring IOC将对象之间的依赖关系交由容器来管理对象&#xff0c;开发者只需要告诉容器…...

前缀和算法:算法秘籍下的数据预言家

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. 前缀和算法的介绍 二、前缀和例题 2.1 【模版】前缀和 2.2 【模板】二维前缀和 2.3 寻找数组的中间下标 2.4 除自身以外数组的乘积 2.5 和为k的子数组 2.6 和可被k整除的子数组 2.7 …...

基于PointNet / PointNet++深度学习模型的激光点云语义分割

一、场景要素语义分割部分的文献阅读笔记 1.1 PointNet PointNet网络模型开创性地实现了直接将点云数据作为输入的高效深度学习方法&#xff08;端到端学习&#xff09;。最大池化层、全局信息聚合结构以及联合对齐结构是该网络模型的三大关键模块&#xff0c;最大池化层解决了…...

LabVIEW调用DLL时需注意的问题

在LabVIEW中调用DLL&#xff08;动态链接库&#xff09;是实现与外部代码集成的一种强大方式&#xff0c;但也存在一些常见的陷阱和复杂性。本文将从参数传递、数据类型匹配、内存管理、线程安全、调试和错误处理等多个角度详细介绍LabVIEW调用DLL时需要注意的问题&#xff0c;…...

【仅限高级Java架构师查阅】Java外部函数安全沙箱构建指南:禁用dlopen/dlsym、符号白名单校验、Rust FFI桥接实践(含SPI自定义ClassLoader隔离方案)

第一章&#xff1a;Java外部函数优化Java外部函数接口&#xff08;Foreign Function & Memory API&#xff0c;即JEP 454/459/460/461/462&#xff09;自JDK 22起正式成为标准特性&#xff0c;为Java与本地代码&#xff08;如C/C库&#xff09;的高效互操作提供了零拷贝、类…...

Python自动化测试框架入门教程

Python自动化测试框架入门教程&#xff1a;从零开始掌握Pytest和unittest &#x1f4dd; 摘要 自动化测试是现代软件开发不可或缺的一部分&#xff0c;能够显著提高代码质量和开发效率。本文将带你从零开始了解Python主流自动化测试框架——Pytest和unittest&#xff0c;包含…...

C语言入门必看:2026年嵌入式开发选C还是C++?

一、在2026年的时候&#xff0c;进行编程选择语言可千万别胡乱去选&#xff01;C语言、C语言、C#语言&#xff0c;它们有着相同源头却有着不同命运&#xff0c;选对了语言才是获得高薪的关键所在&#xff01; 对于编程领域而言&#xff0c;C、C、C#此三门如同“同门兄弟”般的语…...

OpenClaw跨平台实战:千问3.5-9B在mac与Windows的自动化对比

OpenClaw跨平台实战&#xff1a;千问3.5-9B在mac与Windows的自动化对比 1. 为什么需要跨平台对比 去年我在团队内部推广自动化工具时&#xff0c;遇到一个典型问题&#xff1a;同事们的开发环境分散在macOS和Windows两大平台。当我们尝试用OpenClaw千问3.5-9B构建统一自动化流…...

快速验证限流策略:用快马一键生成rate limit exceeded处理原型

快速验证限流策略&#xff1a;用快马一键生成rate limit exceeded处理原型 最近在开发一个需要调用第三方API的项目时&#xff0c;遇到了经典的"rate limit exceeded"问题。作为开发者我们都知道&#xff0c;API调用频率超限是系统设计中必须考虑的场景。传统从零搭…...

Electron 14+ 开发必看:WebContentsView 实战指南(含与 BrowserView 对比)

Electron 14 开发实战&#xff1a;WebContentsView 深度解析与性能优化 如果你正在使用 Electron 14 开发跨平台桌面应用&#xff0c;那么 WebContentsView 绝对是你需要重点掌握的核心组件。作为 Electron 团队在 14 版本引入的全新视图系统&#xff0c;WebContentsView 不仅解…...

2026年4月OpenClaw怎么集成?腾讯云6分钟超简单安装步骤

2026年4月OpenClaw怎么集成&#xff1f;腾讯云6分钟超简单安装步骤。OpenClaw&#xff08;原Clawdbot&#xff09;作为2026年主流的AI自动化助理平台&#xff0c;可通过阿里云轻量服务器实现724小时稳定运行&#xff0c;并快速接入钉钉&#xff0c;让AI在企业群聊、个人工作流中…...

零基础新手指南:借助快马AI无需代码构建你的第一篇论文官网

作为一个完全没有编程基础的研究生&#xff0c;我曾经为了搭建个人论文展示网站头疼不已。直到发现了InsCode(快马)平台&#xff0c;整个过程变得异常简单。下面分享我的完整实践过程&#xff0c;希望能帮助到同样需要展示学术成果的朋友们。 明确网站需求结构 在开始前&#x…...

终极指南:如何用res-downloader一键下载全网无水印资源

终极指南&#xff1a;如何用res-downloader一键下载全网无水印资源 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否经常…...

问道1.6夏日清风单机虚拟机版|200+礼包加持·最强方官1.6完整体验

温馨提示&#xff1a;文末有联系方式【全新封装&#xff5c;问道1.6夏日清风单机虚拟机版】 本版本基于稳定虚拟机环境深度优化&#xff0c;完美集成‘夏日清风’主内容与当前最成熟的‘最强方官1.6’核心框架&#xff0c;运行零冲突、免配置&#xff0c;开箱即玩。【超值&…...