在servlet中,是否在finalize()之前或之後調用destroy()?在servlet中,destroy()被稱爲first或finalize()?
回答
destroy()方法首先被調用。 destroy()將在Servlet容器關閉時被servlet容器調用。 finalize()在垃圾收集器聲明對象之前由JVM調用(並且不保證被調用)。
另外,最後確定()可以或可以不被調用。永遠不要依賴這種事情。當對象超出範圍
finalize()方法將調用,並適用於垃圾回收。所以,當對象沒有超出範圍時,它必須在它之前調用destroy()方法。
沒有,敲定()* *可以被稱爲當物體走超出範圍。在關閉JVM之前,不保證被調用。 – 2009-06-22 17:20:50
@mmyers - 在對象超出作用域之前,至少不能調用finalize()方法,但必須在對象超出作用域之前調用destroy()方法。因此在finalize方法之前總是調用destroy方法。 – 2009-06-22 17:26:54
確實,*如果* finalize()被調用,它將在destroy()之後被調用。 「finalize()方法將被稱爲...」而不是「finalize()方法可能被稱爲...」似乎是誤導性的......「 – 2009-06-22 19:38:25
如果你想釋放在一定的時間資源,不依賴於像servlet容器或JVM這樣做外部代碼。儘可能明確地進行資源分配和取消分配。討厭的錯誤可能是由於你依賴外部代碼清理後的結果。
這是你的偏執。如果servlet容器在適當的時候沒有調用destroy(),那麼它是垃圾,應該用另一個替換。你不可能經常重複發明輪子,這就是應用程序服務器所在的地方, – skaffman 2009-06-22 19:20:26
問題是destroy()方法可能會在相當長的時間後調用。這就是爲什麼我說「在特定時間」,這意味着從您自己的代碼中明確釋放資源是控制資源何時被釋放的唯一方式。 當然,你應該依靠servlet容器上做的工作,但在某些情況下,這可能要花很長。 – 2009-06-25 10:31:23
有以下5個步驟
- 構造
- 的init()
- 服務()>>的doGet()或doPost()
- 破壞()
- 的finalize()
- 1. 在htaccess中稱爲first - robots.txt或mod_rewrite
- 2. JAX-WS Servlet destroy()
- 3. Servlet過濾器不被稱爲
- 4. 爲什麼Finalize應該被保護?
- 5. 爲什麼我的Java對象被複制或finalize()被調用兩次?
- 6. 是否必須重寫servlet init()或init(ServletConfig config)和destroy()方法
- 7. touchesEnded不被稱爲?或隨機被稱爲
- 8. 範圍$ destroy不被觸發
- 9. 從servlet中獲取JSP名稱(或servlet過濾器)
- 10. swagger或api first
- 11. 在Finalize方法
- 12. JSP是servlet,但JSP中沒有稱爲doGet()或doPost()的函數?
- 13. 在stop()被稱爲
- 14. 稱爲兩次的Servlet
- 15. iOS既沒有init或initWithCoder被稱爲
- 16. has_many通過關聯依賴destroy在誰被調用destroy的情況下
- 17. NameError:未定義名稱'first'
- 18. onDestroy被稱爲
- 19. copyWithZone被稱爲
- 20. 被稱爲
- 21. $ scope和$ destroy是如何被調用的?
- 22. 有沒有辦法在VB.NET中Finalize()或Dispose()模塊?
- 23. viewWillAppear中從未被稱爲
- 24. C++中止被稱爲
- 25. URL被稱爲錯在PHP
- 26. touchesBegan在UIView不被稱爲
- 27. 在主鍵時被稱爲
- 28. 在Backbone中執行.destroy()
- 29. 將顯示名稱字符串從「First M. Last」更改爲「Last,First M.」?
- 30. getSystemService無法在Android Studio中被稱爲
謝謝你的解釋 – 2009-06-23 04:50:25