java 内存溢出和内存泄漏_java中内存溢出和内存泄漏的区别

java 内存溢出和内存泄漏_java中内存溢出和内存泄漏的区别虽然在 java 中我们不用关心内存的释放 垃圾回收机制帮助我们回收不需要的对象 但实际上不正当的操作也会产生内存问题 如 内存溢出 内存泄漏内存溢出 outofmemory 简单通俗理解就是内存不够用了 内存泄漏 leakofmemory 一个对象分配内存之后 在使用结束时未及时释放 导致一直占用内存 没有及时清理 使实际可用内存减少 就好像内存泄漏了一样 比如在 jdk6 中不恰当使用 su

虽然在java中我们不用关心内存的释放, 垃圾回收机制帮助我们回收不需要的对象,但实际上不正当的操作也会产生内存问题:如,内存溢出、内存泄漏

内存溢出:out of memory:简单通俗理解就是内存不够用了 。

内存泄漏:leak of memory:一个对象分配内存之后,在使用结束时未及时释放,导致一直占用内存,没有及时清理,使实际可用内存减少,就好像内存泄漏了一样。

比如在jdk6中不恰当使用substring()方法容易引发内存泄漏,JDK7 就无需考虑

jdk6的substring源码:使用的是和父字符串同一个char数组value

public String substring(int beginIndex, int endIndex) {

if (beginIndex < 0) {

throw new StringIndexOutOfBoundsException(beginIndex);

}

if (endIndex > count) {

throw new StringIndexOutOfBoundsException(endIndex);

}

if (beginIndex > endIndex) {

throw new StringIndexOutOfBoundsException(endIndex – beginIndex);

}

return ((beginIndex == 0) && (endIndex == count)) ? this :

new String(offset + beginIndex, endIndex – beginIndex, value);

jdk7的substring源码:可以看出最后创建了一个新的char数组

public String substring(int beginIndex, int endIndex) {

if (beginIndex < 0) {

throw new StringIndexOutOfBoundsException(beginIndex);

}

if (endIndex > value.length) {

throw new StringIndexOutOfBoundsException(endIndex);

}

int subLen = endIndex – beginIndex;

if (subLen < 0) {

throw new StringIndexOutOfBoundsException(subLen);

}

return ((beginIndex == 0) && (endIndex == value.length)) ? this

: new String(value, beginIndex, subLen);

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222392.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午3:52
下一篇 2026年3月17日 下午3:52


相关推荐

  • android studio不能输入中文_Android模拟器

    android studio不能输入中文_Android模拟器很多Android项目的运行都需要用到中文输入法,在一年前的AndroidStudio需要导入输入法apk安装,现在新版的AndroidStudio免去了这个麻烦,下面就教大家如何设置谷歌拼音输入法。

    2022年8月30日
    4
  • 编程从“手动挡”到“自动挡”?Karpathy 大神点赞的 AI 代码神器 Cursor+Claude-3.5-Sonnet 使用教程

    编程从“手动挡”到“自动挡”?Karpathy 大神点赞的 AI 代码神器 Cursor+Claude-3.5-Sonnet 使用教程

    2026年3月15日
    3
  • JDBC预处理对象prepareStatement[通俗易懂]

    JDBC预处理对象prepareStatement[通俗易懂]JDBC预处理对象prepareStatement概述一、SQL注入问题SQL注入:用户输入的内容作为了SQL语句语法的一部分,改变了原有SQL真正的意义。假设有登录案例SQL语句如下:SELECT*FROM用户表WHERENAME=用户输入的用户名ANDPASSWORD=用户输的密码;此时,当用户输入正确的账号与密码后,查询到了信息则让用户登录。但是当用户输入的账…

    2022年6月1日
    39
  • Axiso解决跨域访问

    Axiso解决跨域访问这里以访问豆瓣Top250为例,直接访问如下:this.$axios.get(&amp;amp;amp;amp;amp;quot;http://api.douban.com/v2/movie/top250&amp;amp;amp;amp;amp;quot;).then(res=&amp;amp;amp;amp;amp;amp;gt;{console.log(res)}).catch(err=&amp;amp;amp;amp;amp;amp;gt;{

    2022年5月2日
    48
  • url 转码 java_URL 转码遇到的坑

    url 转码 java_URL 转码遇到的坑1 背景做图片中心时 需要根据图片 URL 去下载图片 发现部分 URL 浏览器里面能访问 但是代码无法下载原因 需要对 URL 进行转码 2 使用 UrlEncode 一开始直接使用 UrlEncode 对 url 转码 如下原始链接 https s3 amazonaws com fromfactory club image 9f 0f 9fbd598cf637 w

    2026年3月19日
    1
  • 深度图像基础知识(一)

    深度图像基础知识(一)深度图像(depthimage)也被称为距离影像(rangeimage),是指将从图像采集器到场景中各点的距离(深度)作为像素值的图像,它直接反映了景物可见表面的几何形状。深度图像经过坐标转换可以计算为点云数据,有规则及必要信息的点云数据也可以反算为深度图像数据。深度数据流所提供的图像帧中,每一个像素点代表的是在深度感应器的视野中,该特定的(x,y)坐标处物体到离摄像头平面最近的

    2022年4月25日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号