Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java的新实例存储多长时间?_Java_Instance - Fatal编程技术网

Java的新实例存储多长时间?

Java的新实例存储多长时间?,java,instance,Java,Instance,所以最近我遇到了一个问题:当我创建一个对象的新实例时,它存储了多长时间?基本上我是问它是如何被储存的 例如: public void initUser(Player player) { User u = new User(ally, player.getUuid()); u.setHealth(20); } (作为对象的用户) 那么u存储了多长时间?Java在我处理完它之后会清理它吗?(在调用#setHealth之后) 谢谢。一旦您处理完对象,Java就会自己执

所以最近我遇到了一个问题:当我创建一个对象的新实例时,它存储了多长时间?基本上我是问它是如何被储存的

例如:

public void initUser(Player player) {
        User u = new User(ally, player.getUuid());
        u.setHealth(20);
}
(作为对象的用户)

那么
u
存储了多长时间?Java在我处理完它之后会清理它吗?(在调用#setHealth之后)


谢谢。

一旦您处理完
对象
,Java就会自己执行gc。

Java运行时的一个特殊部分称为垃圾收集器负责在所有对象不再使用时销毁它们

应用程序可以在对象创建下通过显式和隐式方式为对象分配内存,但不能显式释放内存

要向JVM发出对象已准备好进行垃圾收集的信号,对象需要通过以下任一方式解除关联:

  • 显式非引用
    person=null
    //person是person的一个实例

  • 对象超出范围 一旦方法返回到调用方法,在方法内创建的对象就会超出范围。 所以在下面的例子中,一旦
    method()
    结束,p隐式变为null

    公开作废法(){

    人员p=新人员(); }

  • 在解除连接后,VM可以回收该内存。虚拟机可以决定何时对未引用的对象进行垃圾收集。但规范并不能保证任何可预测的行为。由VM决定何时从未刷新的对象中回收内存,或者它可能根本不回收内存

    如果该类声明了终结器(即
    public void finalize()
    method),则垃圾收集器将在释放该实例占用的内存空间之前,在该类的实例上执行
    finalize()
    方法

    所以很明显,垃圾收集的确切时间是不可预测的


    来源:

    您为用户创建的对象是本地对象。因此,它将在方法中处于活动状态,一旦程序退出该方法,该对象将符合GC的条件

    class Test{
    User u1 = new User();
    public void initUser(Player player) {
        User u = new User(ally, player.getUuid());
        u.setHealth(20);
    }
    }
    

    在上面的代码中,对象u1在类的整个生命周期中都是活动的。如果需要将该对象设置为GC,则使u1=null

    该对象是inituser方法的本地对象。。。一旦它离开这个方法。。。该对象符合gc…是的,Mati,刚刚看了一下。这就是我所寻找的。它将在不再使用后的某个时间点被自动垃圾收集。实际上,由于此对象没有在该方法之外使用,因此可能使用Escape Ansys将其放置在堆栈上,从而被消除,实际上整个方法可以优化为零。这不是真的