虽然在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);

}

java 内存溢出和内存泄漏_java中内存溢出和内存泄漏的区别相关推荐

  1. Java比较同一map是否相同_Java 中HashTable、HashMap、TreeMap三者区别,以及自定义对象是否相同比较,自定义排序等...

    /* Map集合:该集合存储键值对.一对一对往里存.而且要保证键的唯一性. Map |--Hashtable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.效率低.基本已废 ...

  2. java set list 区别是什么_Java中的list和set有什么区别

    Java中的集合共包含三大类,它们分别是Set(集),List(列表)以及Map(映射). List方法与set方法的区别 (1)重复对象 list方法可以允许重复的对象,而set方法不允许重复对象 ...

  3. c语言malloc引用类型作参数,c语言中动态内存分配malloc只在堆中分配一片内存.doc...

    c语言中动态内存分配malloc只在堆中分配一片内存 .C语言中动态内存分配(malloc)只在堆中分配一片内存,返回一个void指针(分配失败则返回0),并没有创建一个对象.使用时需要强制转换成恰当 ...

  4. java 内存溢出和内存泄漏_JAVA中的内存溢出和内存泄漏有很大的区别

    JAVA中的内存溢出和内存泄漏分别是什么,有什么联系和区别,我谈谈自己的理解. 内存泄漏(memory leak ):申请了内存不释放,比如100m的内存,分配了10m的内存一直不回收,那么可以用的内 ...

  5. java swing还有人用吗_Java不是自动管理内存吗,怎么还有内存泄漏?

    最近最我的机顶盒里有个Android应用老提示应用已停止运行,我查看Log后发现是Java堆内存溢出然后挂掉了.Java不是自动管理内存吗,怎么还会有内存泄漏,是Java虚拟机的垃圾回收机制有问题吗? ...

  6. java 内存泄漏_Java开发者必须知道的内存泄漏问题

    1. 简介 Java的核心优势之一是在内置垃圾收集器(简称GC)的帮助下实现自动内存管理.GC隐含地负责分配和释放内存,因此能够处理大多数内存泄漏问题. 虽然GC有效地处理了大部分内存,但它并不能成为 ...

  7. java 内存同步_Java中的硬件事务性内存,或者为什么同步将再次变得很棒

    java 内存同步 总览 硬件事务内存有可能允许多个线程同时以推测方式访问相同的数据结构,并使缓存一致性协议确定是否发生冲突. HTM旨在为您提供细粒度锁定的可伸缩性,粗粒度锁定的简单性以及几乎没有锁 ...

  8. java 内存跟踪_详解JVM中的本机内存跟踪

    1.概述 有没有想过为什么Java应用程序通过众所周知的-Xms和-Xmx调优标志消耗的内存比指定数量多得多?出于各种原因和可能的优化,JVM可以分配额外的本机内存.这些额外的分配最终会使消耗的内存超 ...

  9. java 软引用_Java中弱引用和软引用的区别以及虚引用和强引用介绍

    知道弱引用和软引用的概念与如何使用它们是两码事,引用类在垃圾回收工作的过程中有重要作用.我们都知道垃圾回收器会回收符合回收条件的对象的内存,但并不是所有的程序员都知道回收条件取决于指向该对象的引用类型 ...

最新文章

  1. rffc2071_基于 RFFC2071的变频器设计
  2. hrsc2016 下载 数据集_PIoU Loss:倾斜目标检测专用损失函数,公开超难倾斜目标数据集Retail50K | ECCV 2020 Spotlight...
  3. 计算机的新应用论文,计算机教学应用的新创新模式论文原稿
  4. java webservice 异常_java异常webservice
  5. react 截取视频随意一帧裁剪图片存为base64格式
  6. c++邮递员投递经过特定点_关于中国邮递员问题和欧拉图应用
  7. python电商项目介绍_django打造电商项目
  8. Windows自带的远程协助工具(非远程桌面,类比QQ远程桌面)
  9. 情缘难舍 愿为一叶扁舟
  10. 【lizhi125】分区助手:分区魔术师的终结者/无损分区魔术师!(免费中文完美支持Win7/32与64位系统)
  11. 计算机无法读光盘,win7系统无法读取光盘数据怎么办 电脑光驱读不出光盘数据解决方法...
  12. WINDOWS 7 X86专业版SP1后续补丁包20150901(微软官方下载地址列表)
  13. Lucene倒排索引简述 之倒排表
  14. 华东师范计算机考研科目,华东师范大学计算机技术研究生考试科目和考研参考书目...
  15. 火星来客创业周刊第1期:独立开发者Twitter小工具60天,从月入300美金到月入3000美金
  16. 年年岁岁花相似,岁岁年年人不同
  17. Vue-Video-player多rtmp视频流显示在同一个页面+流媒体服务器部署
  18. 分享自己学英语的经验
  19. python爬微博数据合法吗_GitHub - ChaliceRunRunRun/weibo-crawler: 新浪微博爬虫,用python爬取新浪微博数据...
  20. BIOS知识枝桠——常用functions查阅

热门文章

  1. 用什么方法操作PDF旋转页面,什么方法简单
  2. 【AR技术:带你走进虚拟与现实的交集】
  3. 蔚来:需要一个新故事
  4. 全球与中国防水轨迹球市场深度研究分析报告
  5. 数据结构——图最全总结(期末复习必备)
  6. C语言单链表实现初始化、创建、增、删、查等基本操作(详细)
  7. LightDB中的存储过程(七)—— 子程序
  8. implements Handler.Callback
  9. Linux 命令之软连接详解
  10. FFmpeg3最新的解码接口avcodec_send_packet和avcodec_receive_frame