java - 在已创建的对象上使用“new”语句会导致内存泄漏吗?
问题描述
我对这个问题做了一些研究,但我还没有真正找到答案。
例如,我知道如果我在游戏循环中写了这个:
public void update () {
Object object = new Object();
}
然后我会有内存泄漏。
但是如果你有一个你正在调用的类对象new
,它不会导致内存泄漏,对吧?由于您没有创建另一个对象,因此您只是给当前对象一个新值。
例如:
private Object object;
//...
public void update () {
object = new Object();
}
-编辑
谢谢你的帮助!我现在发现我几乎不知道内存泄漏是什么或导致它的原因......但我现在比以前更了解了!
解决方案
你的问题的前提是有缺陷的。
你永远不会在已经创建的对象上调用 new 。您调用 new,并且您总是(按规范)获得一个新对象(或发生异常或错误之类的事情)。
您在这里询问的是将它们分配给变量或字段。就其本身而言,从内存泄漏的角度来看,它是变量还是字段都没有区别。这个字段或变量是否也被初始化也没有区别:你只是用对另一个对象的引用替换对一个对象的引用。
唯一会有所不同的是,如果您还将对象添加到 List(或其他一些集合、数组等),或者将包含该字段的对象添加到 List 等:那么,就不可能垃圾收集,因为对象仍然可以访问。然后你会有内存泄漏。
推荐阅读
- jenkins-pipeline - Jenkinsfile 在条件下访问全局变量
- git - 为什么我切换到 master 时会看到另一个分支的更改?
- laravel - 如何验证整个请求是 Laravel 中的一个数组?
- c - Makefile 中的“缺少分隔符”错误是什么意思?
- android - camera2 像素值与传感器曝光时间不成线性关系
- node.js - 如何使用 Discord.js 检查消息作者是否拥有公会所有权?
- java - 避免在 servlet 之间共享静态变量
- unity3d - Unity3D:如何根据鼠标输入动态创建带有碰撞器的 3D 网格?
- javascript - 按两个值对多维数组进行分组
- sql - 如何在根据其他条件选择值时部分 GROUP BY 列?