当前位置: 首页 > 面试题库 >

String类中的substring方法导致内存泄漏

刘承运
2023-03-14
问题内容

据说substring String类中的方法会导致内存泄漏。是真的吗 怎么样?有什么替代方法吗?
尤其是在寻找答案时,
还有哪些其他原因可以导致Java的内存泄漏呢?这将帮助我在编码时注意。


问题答案:

在过去的JDK版本中,该substring方法的实现将建立一个新String对象,该对象保留对整个char数组的引用,以避免复制它。因此,您可能会无意中仅使用一个字符串来引用一个很大的字符数组。

现在,此方法已更改,并且此“泄漏”不再存在。

如果要使用旧的JDK(早于OpenJDK 7,Update 6),并且希望在之后包含最少的字符串substring,请使用带有另一个字符串的构造函数:

String s2 = new String(s1.substring(0,1));

至于第二个问题,关于“其他可能导致Java内存泄漏的事情”,不可能以建设性的方式回答。在Java标准库中,没有很多实例可以让您轻松地隐藏对对象的引用。通常,请注意您构建的所有引用,最常见的问题可能是未清理的集合或外部资源(文件,数据库事务,本机窗口小部件等)引起的。



 类似资料:
  • 我想首先说,这是我第一次必须处理性能,因为这是我第一次开发一个android应用程序。 该应用程序是一个源代码编辑器,在这里你可以打开文件,修改它们,并将它们保存回来。该应用程序由4个部分组成: 导航器视图:包含打开文件的ListView和打开文件夹的TreeView。 代码视图容器:它保存包含实际代码的视图。 代码容器:这是一个小视图,包含一个文本视图和一个自定义EditText(由我扩展Edi

  • 本文向大家介绍Java中由substring方法引发的内存泄漏详解,包括了Java中由substring方法引发的内存泄漏详解的使用技巧和注意事项,需要的朋友参考一下 内存溢出(out of memory ) :通俗的说就是内存不够用了,比如在一个无限循环中不断创建一个大的对象,很快就会引发内存溢出。 内存泄漏(leak of memory) :是指为一个对象分配内存之后,在对象已经不在使用时未及

  • 问题内容: 导致Java内存泄漏的最简单方法是什么? 问题答案: 除非您执行以下操作,否则您实际上无法在Java中“泄漏内存”: 实习生字符串 生成类 jni调用的本机代码中的泄漏内存 在一些被遗忘或晦涩的地方保存对您不想要的事物的引用。 我认为您对最后一种情况感兴趣。常见方案是: 侦听器,尤其是内部类 缓存。 一个很好的例子是: 构建一个Swing gui,它可以启动数量不限的模态窗口; 让模态

  • 我们在堆大小为512M的IBM J9 VM上运行weblogic服务器。 今天,服务器因OutOfMemory错误而失败。 我使用Eclipse Memory Analyzer打开了堆转储文件xxx.phd(安装了IBM DTFJ pluign以支持。phd文件)。 垫子给我一份泄漏嫌疑人报告,像这样: 我如何找到创建这个大数组的类? 或者任何帮助我识别大数组的提示?

  • 在Activity中使用Thread导致的内存泄漏 原文链接 : Activitys, Threads, & Memory Leaks 原文作者 : AlexLockwood 译文出自 : 开发技术前线 www.devtf.cn 译者 : chaossss 校对者: yinna317 状态 : 完成 注:这篇博文涉及的源码可以在 GitHub 上面下载哦 做 Android 开发最常遇到的问题就是

  • 我有一些和等,但是我没有设置。你觉得会是那样吗? 你有什么想法或建议吗? PS:该应用程序在Ubuntu机器上运行 多谢.