簡體   English   中英

Java應用程序關閉時,是否會刪除Java對象?

[英]Do java objects get removed when a java application closes?

我一直在學習Java及其如何使用垃圾回收與手動釋放對象。 我找不到Java應用程序關閉時是否刪除Java對象的答案? 當一個帶有對象的小型控制台應用程序在JVM中發生了什么

public class Hello {
    public String name = "Y_Y"; 
}

內存中存在並且控制台應用程序已關閉?

謝謝,Y_Y

當應用程序關閉時,JVM將停止運行,並將其所有內存返回給主機。

出於所有實際目的,堆和在此分配的所有對象都停止存在。

如果您擔心安全性,則任何具有提升特權的進程都將能夠掃描該內存並讀取剩下的內容。 在將內存分配給另一個進程之前,必須這樣做。 但這也可能在原始程序/ jvm運行時發生。

你不能確定。 未指定或保證行為。 但是您不必對此太在意。 您應該注意的是,內存已回收。

如果安全是您的問題,那不應該。 遇到安全案例時應予以處理。 用0或垃圾重寫整個內存會使退出速度變慢。

發生的事情是字符串占用的內存在退出時被釋放。 如果對象實現了finalize()方法,則可以調用它。

另外,您可以使用System.gc();手動調用垃圾收集器System.gc();

以下是Sun規范的摘錄。

Java平台的規范幾乎沒有保證垃圾收集的實際工作方式。 這是Java虛擬機規范(JVMS)關於內存管理的內容。

堆是在虛擬機啟動時創建的。 自動存儲管理系統(稱為垃圾收集器)可以回收對象的堆存儲; 對象永遠不會顯式釋放。 Java虛擬機不假定使用特定類型的自動存儲管理系統,可以根據實現者的系統要求選擇存儲管理技術。1盡管看上去有些混亂,但未嚴格定義垃圾收集模型這一事實實際上很重要有用-嚴格定義的垃圾回收模型可能無法在所有平台上實現。 同樣,從長遠來看,它可能會阻止有用的優化並損害平台的性能。

盡管沒有一個地方包含所需垃圾收集器行為的完整定義,但是許多Java模型是通過Java語言規范和JVMS中的許多部分隱式指定的。 雖然不能保證遵循的確切過程,但是所有兼容的虛擬機都共享本章中介紹的基本對象生命周期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM