【问题标题】:Releasing Scala Object resources释放 Scala 对象资源
【发布时间】:2014-03-19 15:20:51
【问题描述】:

如何释放 Scala 对象持有的内存资源?我认为对象的内部工作很像 jvm 中的 Java 静态类?有没有办法释放这些资源,比如使用类加载器或其他技术?

【问题讨论】:

  • 我要问,为什么?你为什么要问这个问题,你要解决什么问题,所以这必须是你需要解决的方法?
  • Scala 中object 的内部很像Java 的线程安全单例。通常情况下,您甚至不必费心释放资源 - 垃圾收集器会为您完成工作
  • “为什么”是这样的:我想写一个高管;一个包含类和对象的自包​​含沙箱的容器,它将分配资源。有时我需要刷新由执行人员管理的沙箱......基本上刷新沙箱持有的所有资源并可能加载不同的类和对象,所有这些都由执行人员管理。我不能有旧物的粪便。
  • 把它想象成一个迷你云。执行官我的笨蛋甚至知道/看到沙箱中的内容......它只是拿着它,但它也需要能够吹动它!

标签: scala object


【解决方案1】:

如果您控制代码,请尽量避免这样做。应该假设对象是惰性创建的、不可破坏的全局变量。因此,如果可以避免的话,它们真的不应该保持大的或可变的状态。

【讨论】:

  • (我意识到这并不完全是一个答案,并且个人有兴趣看到一个,但仍然建议避免这种模式。)
【解决方案2】:

考虑到您的 cmets,我认为最合理的方法是让执行人员拥有沙箱(即除了执行人员之外没有人直接引用沙箱),只需创建和初始化一个新沙箱,而不是“刷新”现有沙箱.旧沙箱将被垃圾收集,它加载的任何东西也应该被收集。

【讨论】:

  • 这正是我想要的。问题是,如果有人将对象放入沙箱代码中,即使所有类都很容易清理,对象以及它们分配的任何内存仍然存在,从而导致可怕的内存泄漏。尚未找到解决此问题的方法。
  • 您的沙箱是如何实现的?例如。每个都在自己的 JVM 中运行吗?从 JVM 的角度来看,对象没有什么特别之处,所以如果其他一切都被清理干净了,它们也应该是这样。
  • 这是我最后的手段。我希望在同一个jvm中运行。我认为拥有不同的类加载器可以做到这一点,但现在我不确定......只是因为我扔掉了一个类加载器(比如沙箱),我不确定它是否也会清理该类加载器加载的静态对象。
猜你喜欢
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 2012-01-08
  • 2012-05-04
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多