Java 如果多次创建HashMap对象,则会导致内存泄漏 公共类测试处理器{ 公共数据(){ 布尔成功=真; HashMap hMap=null; 如果(成功){ hMap=新的HashMap(); hMap.put(“一”、“爪哇”); hMap.put(“两个”、“servlet”); } 如果(hMap!=null){ 过程数据(hMap); } } 公共void processData(HashMap映射){ String param1=map.get(“一”); String param2=map.get(“两个”); } }
在上面的代码中,如果我们调用fillData()方法多次,如果条件变为true,则将多次创建HashMap对象。这会导致内存泄漏问题吗?如果发生内存泄漏,我们如何修复它?它不应创建内存泄漏,因为您将替换现有的HashMap,这将允许对旧的HashMap进行垃圾收集 如果在外部将对hashmap中的对象的引用保留,则可能会导致保留这些对象 *根据您的语法,我假设这是java。java虚拟机(JVM)主动并自动管理应用程序使用的内存。关于Java的内存管理,需要记住以下几点:Java 如果多次创建HashMap对象,则会导致内存泄漏 公共类测试处理器{ 公共数据(){ 布尔成功=真; HashMap hMap=null; 如果(成功){ hMap=新的HashMap(); hMap.put(“一”、“爪哇”); hMap.put(“两个”、“servlet”); } 如果(hMap!=null){ 过程数据(hMap); } } 公共void processData(HashMap映射){ String param1=map.get(“一”); String param2=map.get(“两个”); } },java,memory-leaks,Java,Memory Leaks,在上面的代码中,如果我们调用fillData()方法多次,如果条件变为true,则将多次创建HashMap对象。这会导致内存泄漏问题吗?如果发生内存泄漏,我们如何修复它?它不应创建内存泄漏,因为您将替换现有的HashMap,这将允许对旧的HashMap进行垃圾收集 如果在外部将对hashmap中的对象的引用保留,则可能会导致保留这些对象 *根据您的语法,我假设这是java。java虚拟机(JVM)主动并自动管理应用程序使用的内存。关于Java的内存管理,需要记住以下几点: 内存在堆内存中自动分
- 内存在堆内存中自动分配给程序创建的对象
- 当您的程序无法再访问某个对象时(通常是由于超出范围,无法访问引用该对象的变量),内存将由一个称为垃圾收集的进程自动回收
- 垃圾收集是自动且不确定的。您的程序无法知道(或预测)垃圾回收将在何时发生(因此您无法确切知道何时回收无法访问的对象)
null
主动分配给可能引用不再“使用”的对象的元素非常重要
2。任何时候,只要有一个长寿命的对象,其中包含对一个您希望是短命的对象的引用。这可能导致内存泄漏的最常见情况是使用非静态内部类和匿名类(两者都包含对其封闭实例的引用)
每个非静态内部类都有一个对其周围类的隐式引用。匿名类是类似的。要成功创建内存泄漏,只需将一个内部类对象传递给一个方法,该方法保留对所提供对象的引用,就完成了
为什么这会导致内存泄漏?假设您实现了缓存之类的东西。接下来,按照执行路径找到一个本地对象,该对象将其一些内部类对象存储到缓存中。本地对象超出范围后,将不再进行垃圾收集!缓存中的内部类对象持有对周围对象的引用,该对象仍然是可引用的,因此不再是垃圾收集的候选对象。匿名类也是如此 你在用什么编程语言?将其添加为标记。你的编程语言有垃圾收集功能吗?使用java语言你读过关于java如何处理垃圾收集的内容吗?为什么你认为这段代码有内存泄漏?Dodd 10x我更新了代码。这会导致内存泄漏吗?看起来你不会导致内存泄漏。如果不再有对旧地图的引用,它将被垃圾收集。也就是说,我不知道为什么需要多次调用fillData@Dodd10x因为Java 7可以使用菱形操作符,是的,但这并不会产生类似
Map m=new HashMap()的东西代码>不正确。这两者都是合法的,而且都很好。布莱恩,他有一个新的HashMap(),这是不正确的。
public class TestProcessor{
public void fillData(){
boolean success = true;
HashMap<String,String> hMap = null;
if (success){
hMap = new HashMap<String,String>();
hMap.put("one","java");
hMap.put("two","servlet");
}
if(hMap! = null){
processData(hMap);
}
}
public void processData(HashMap<String,String> map){
String param1 = map.get("one");
String param2 = map.get("two");
}
}