`

Java的String导致的内存泄露

    博客分类:
  • java
阅读更多
Java内存泄露的原因只有一个:某个你认为释放了的对象并没有被你释放!也就是说,你还在某个地方保留了对这个对象的引用。
内存泄露一般都出现在自己的代码之中,比如,一不小心设置了一个集合类型的静态变量等等。可是,Java(JDK)自己带的对象也有不少能够导致内存泄露的,String类型是其中最严重的一种。今日刚好被我不幸的遇到了。我只不过用了一下subString方法而已,从1000多个html页面里面找了一些文本出来,结果,String使用的那种直接引用原始文本(char[]数组),导致了本来只需要几十K(200字节*1000个)大小的String数组,变成了(40K字节*1000个),结果内存不够,程序挂了。
所以啊,下次对任何String进行操作的时候,一定要看看这个String的大小如何,如果它很大,千万使用new String(original.subString(..).toCharArray())的形式重新构建一个String出来。除了subString方法以外,你使用正则表达式匹配的时候,也会有这个问题。
分享到:
评论

相关推荐

    JAVA内存溢出问题总结

    JAVA内存溢出问题总结 JAVA 内存溢出问题是指...如果程序中创建了太多对象,而没有及时释放,将会导致内存溢出。 内存溢出问题是 Java 开发中常见的错误,通过调整容器参数和优化程序代码,可以避免内存溢出的发生。

    Java内存分析工具ji

    Java内存泄漏是指在Java程序中存在一些不再使用的对象,但是由于某些原因没有被垃圾回收器正确地回收,导致内存持续增加,最终可能导致程序性能下降甚至崩溃。Java内存泄漏的原因可能有很多,如对象创建后未被正确...

    java内存分配和String类型的深度解析Java开发J

    两者之间的差异可能导致内存效率问题,因此在编程时需谨慎选择。 String的连接操作也是一个常见的性能话题。使用`+`操作符连接字符串会创建新的String对象,如果频繁操作,会产生大量临时对象,消耗内存。为优化...

    如何用Java编写一段代码引发内存泄露Java开发Java

    以下我们将深入探讨如何在Java中编写可能导致内存泄露的代码,以及如何避免这种情况。 1. **强引用:**在Java中,对象间的引用分为强引用、软引用、弱引用和虚引用四种。最常见的内存泄露就是由于过度使用强引用...

    java内存泄露相关资料

    在Java编程中,内存泄露是一个重要的问题,因为它可能导致程序性能下降,甚至导致应用程序崩溃。内存泄露通常发生在对象不再使用但仍然被引用,使得垃圾收集器(GC)无法回收这些对象占用的内存。理解Java内存泄露的...

    关于(java heap space)内存溢出的解决办法

    - **内存泄漏**:程序中存在未释放的引用,导致对象无法被垃圾收集器回收,久而久之,内存占用持续增加。 ### 3. 解决办法 #### 3.1 调整JVM参数 - 增加堆大小:通过`-Xms`和`-Xmx`设置初始和最大堆大小,如`-Xms...

    Java 分析并解决内存泄漏的实例

    Java内存泄漏是一个严重的问题,它会导致程序性能下降,甚至可能导致应用程序崩溃。理解如何分析和解决这类问题对于Java开发者至关重要。本文将深入探讨Java内存泄漏的实例,介绍如何使用常见的工具和方法来诊断和...

    java内存分配情况

    在Java编程中,理解这些内存区域的分配规则对于优化代码性能和避免内存泄漏至关重要。 1. **寄存器**:这是最快捷的存储区域,但不在Java程序员的控制范围内。操作系统会自动使用寄存器来存储最频繁访问的变量,以...

    android 内存泄露 分析方法

    然后,我们可以使用 MAT 的 dominator tree 视图来查看对象之间的引用关系,从而找到导致内存泄露的对象。 使用 MAT 来分析内存泄露是非常有用的。MAT 提供了多种视图来帮助我们快速地找到内存泄露的根源。了解内存...

    JVM模拟内存泄漏代码

    堆内存泄漏是指程序中的对象在不再被使用后,由于某些原因没有被垃圾收集器回收,导致堆内存持续占用,最终可能导致系统资源耗尽。常见的堆内存泄漏场景包括: 1. 长生命周期的对象持有短生命周期对象的引用,使得...

    java 中string 和srtingbuffer的区别

    如果程序中有很多未被引用的旧`String`对象,它们不会立即被垃圾回收,可能会导致内存泄漏。 - `StringBuffer`的内存占用:`StringBuffer`对象的值是可变的,修改`StringBuffer`的实例时,只需更新内部的字符数组...

    Java语言中内存管理的几个技巧.rar

    - 不正确的引用管理可能导致内存泄漏,即使对象不再使用,由于仍有引用指向它,GC无法回收。 - 检查并避免循环引用,确保在不再需要对象时解除引用。 5. **内存溢出问题** - **堆溢出**:过多的对象实例导致堆...

    JAVA垃圾回收机制与内存泄露问题.docx

    - **内存不足**:当应用运行中创建新对象导致内存空间不足时,JVM会强制进行GC,回收内存以供新对象分配。如果连续几次GC后仍无法满足内存需求,JVM会抛出“Out of Memory”异常,导致程序停止。 3. **减少GC开销...

    Java中由substring方法引发的内存泄漏详解

    在 JDK 1.6 中,如果我们使用 substring 方法来截取一个大字符串的一部分,那么会导致内存泄漏的问题。这是因为 substring 方法在创建新的字符串对象时,会使用原来父数组的 char 数组 value,这样就会导致父字符串...

    Java内存分配原理

    然而,如果对象被长时间无引用但未被垃圾回收,就会导致内存泄漏,消耗系统资源。 静态域,顾名思义,存放类级别的静态成员,这些成员与类关联,而非具体的对象实例。它们在整个类的生命周期内都存在,直到类卸载。...

    JAVA虚拟机内存分配机制

    在编写Java程序时,理解栈和堆的区别以及内存分配原则至关重要,这有助于优化程序性能,避免内存泄漏,并正确处理对象的生命周期。合理的内存管理能够提高程序运行效率,降低垃圾回收的压力,同时也有助于避免因内存...

    Java内存溢出和内存泄露

    Java内存溢出和内存泄露 Java内存溢出和内存泄露是Java开发中常见的问题,它们之间存在着紧密的联系,了解它们对于编写高质量的Java代码非常重要。 一、为什么要了解内存泄露和内存溢出? 了解内存泄露和内存溢出...

    java陷阱常见面试题

    1. 内存管理:Java使用垃圾回收机制管理内存,但过度依赖可能导致内存泄漏。理解对象生命周期、引用类型和内存回收策略至关重要。 2. String对象与字符串常量池:String是不可变的,创建多个相同的String对象会占用...

    一文带你吃透Java中的String类.rar

    但是,如果String与其他对象组合形成引用链,可能会导致内存泄漏,这时需要注意及时解除引用,以便垃圾回收器能正确工作。 总之,Java中的String类是一个功能强大且基础的类,理解其特性和使用技巧对于提升编程效率...

    Java中String和StringBuffer的区别.doc

    堆内存的分配和回收由Java的垃圾收集器(Garbage Collector, GC)自动管理,它负责识别不再使用的对象并释放其占用的内存,以防止内存泄漏。 JSP(JavaServer Pages)是一种动态网页技术,它提供了几个内置对象以...

Global site tag (gtag.js) - Google Analytics