`

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避免内存泄露

    然而,在实际应用中,仍然存在一些特殊情况会导致内存泄露的发生。 #### 二、内存泄露的原因分析 1. **未及时关闭资源**:例如文件句柄、数据库连接等,如果不主动关闭,即使不再使用,也会占用系统资源。 2. **...

    JAVA内存溢出问题总结

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

    spring mvc重定向导致内存溢出解决方案

    ### Spring MVC 重定向导致内存溢出解决方案 在Spring MVC框架中进行页面重定向操作时,可能会遇到因重定向导致的内存溢出问题。本文将详细介绍该问题的原因、原理以及解决方法。 #### 一、问题背景及原因分析 在...

    Java内存分析工具ji

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

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

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

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

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

    java内存泄露相关资料

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

    Java 内存溢出解决办法

    4. 分析内存使用:使用内存分析工具,如VisualVM、MAT(Memory Analyzer Tool)等,对应用程序进行内存快照分析,找出内存泄漏的源头,然后修复。 5. 监控系统资源:通过JMX(Java Management Extensions)或其他...

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

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

    JVisualVM简介与内存泄漏实战分析

    内存溢出(Memory Leak)是指程序在申请内存后未能释放已经不再使用的内存,导致随着时间推移,可用内存越来越少,最终导致程序或整个系统崩溃的情况。JVisualVM提供了多种工具来帮助开发者定位和解决这类问题。 ##...

    JAVA内存溢出详解.doc

    Java内存溢出(Out Of Memory,OOM)是Java应用程序运行时常见的问题,它通常发生在程序对内存需求超过了Java虚拟机(JVM)所能提供的可用内存时。本文将深入探讨Java内存溢出的原因、表现以及如何解决。 1. **Java...

    java核心 内存分配问题

    这解决了程序员手动管理内存可能导致的内存泄漏问题。然而,垃圾回收也可能带来性能开销,尤其是在大型系统中。 **内存优化**: 为了优化内存使用,开发者应考虑以下几点: - 避免不必要的对象创建,尤其是大对象,...

    java内存分配情况

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

    android 内存泄露 分析方法

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

    java内存空间详解

    ### Java内存空间详解 #### 一、Java内存机制概述 Java程序在运行过程中涉及的内存主要分为两...此外,Java的垃圾回收机制能够自动处理不再使用的对象,简化了内存管理过程,但也可能导致某些情况下的内存占用较高。

    JVM模拟内存泄漏代码

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

    java 中string 和srtingbuffer的区别

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

    深入Java核心 Java内存分配原理精讲

    如果程序中存在大量的内存泄漏,则会导致内存溢出。 #### 六、示例分析 为了更直观地理解上述概念,下面通过几个具体的示例来进行分析: 1. **对象与引用**:当我们声明一个对象并赋值时,比如`int a = 3;`,此时...

Global site tag (gtag.js) - Google Analytics