如果在现有实例上分配新类,会发生什么?

时间:2015-05-18 00:39:39

标签: java android class

只是一个非常简单的问题,在Java中,如果我将我的类的实例设置为全局变量,例如:

class User < ActiveRecord::Base
  has_secure_password

  validate :current_password_is_correct,
           if: :validate_password?, on: :update

  def current_password_is_correct
    # For some stupid reason authenticate always returns false when called on self
    if User.find(id).authenticate(current_password) == false
      errors.add(:current_password, "is incorrect.")
    end
  end

  def validate_password?
    !password.blank?
  end

  attr_accessor :current_password
end

如果我稍后在代码中为其分配了一个新的类实例:

MyClass mc = new MyClass();

类的旧实例会发生什么,它会导致内存泄漏,这是不好的做法吗?

干杯。

2 个答案:

答案 0 :(得分:5)

第一个MyClass被垃圾收集删除,mc被指定为一个新的MyClass,除非MyClass的第一个实例被另一个变量引用,在这种情况下垃圾收集不会销毁它。

答案 1 :(得分:2)

这是托管内存的重点。除非它持有一些其他外部资源(如网络连接),否则您不需要在完成对象时手动清除或删除对象。 JVM(或者,在这种情况下,Android运行时)跟踪对象,当他们不再使用它们时发出通知,并回收内存。