Java 在servlet中,destroy()被称为first或finalize()?

Java 在servlet中,destroy()被称为first或finalize()?,java,servlets,Java,Servlets,在servlet中,destroy()是在finalize()之前还是之后调用的?首先调用destroy()。servlet容器将在关闭servlet时调用destroy()。finalize()在垃圾收集器声明对象之前由JVM调用(并且根本不保证被调用)。此外,finalize()可以被调用,也可以不被调用。永远不要指望会发生这种情况。finalize()方法将在对象超出范围并符合垃圾收集条件时调用。所以,当对象未超出范围时,destroy()方法肯定会在它之前调用 如果您想在某个时间释放资源

在servlet中,destroy()是在finalize()之前还是之后调用的?

首先调用destroy()。servlet容器将在关闭servlet时调用destroy()。finalize()在垃圾收集器声明对象之前由JVM调用(并且根本不保证被调用)。

此外,finalize()可以被调用,也可以不被调用。永远不要指望会发生这种情况。

finalize()方法将在对象超出范围并符合垃圾收集条件时调用。所以,当对象未超出范围时,destroy()方法肯定会在它之前调用

如果您想在某个时间释放资源,不要依赖servlet容器或JVM等外部代码来释放资源。尽可能明确地分配和取消分配资源。严重的错误可能是由于依赖外部代码在您之后进行清理而导致的。

下面有5个步骤

  • 建造师
  • init()
  • service()>>doGet()或doPost()
  • 销毁
  • 定稿

  • 否,当对象超出范围时可能会调用finalize()。不能保证在JVM关闭之前调用它。@mmyers-finalize()方法至少不能在对象超出范围之前调用,但必须在对象超出范围之前调用destroy()方法。因此,destroy方法总是在finalize方法之前调用。如果调用finalize(),它将在destroy()之后调用。说“finalize()方法将被调用…”而不是“finalize()方法可能被调用…”似乎有误导性,这让你有些偏执。如果servlet容器没有在适当的时间调用destroy(),那么它就是垃圾,应该被另一个容器替换。你不可能一辈子都在不断地重新发明轮子,这就是应用服务器的用途,关键是destroy()方法可能会在相当长的时间后被调用。这就是为什么我说“在某个特定的时间”,意思是明确地从您自己的代码中释放资源是控制何时释放资源的唯一方法。当然,您应该依赖servlet容器来完成它的工作,但在某些情况下,这可能需要太长时间。