Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有效的Java—永远不依赖终结器来更新关键的持久状态_Java_Finalizer - Fatal编程技术网

有效的Java—永远不依赖终结器来更新关键的持久状态

有效的Java—永远不依赖终结器来更新关键的持久状态,java,finalizer,Java,Finalizer,为何不应这样做?由于执行垃圾收集时将调用终结器,为什么我们不能在此处添加持久性相关代码?它表示关键(!)持久性数据。可以让终结器写入持久数据,但如果不写入此数据,则必须确定 由于缺少关键数据是不正常的,因此不应将其放入终结器 但是,当GC必须收集所有内容时,如何不调用终结器呢? 这一次,应用程序可以强制终止,这样就永远不会给GC留下运行的机会。正如书中所解释的那样 JLS不仅不能保证终结器将获得 立即执行,不能保证他们会被执行 完全完全有可能,甚至有可能,一个程序 在不执行终结器的某些对象上终止

为何不应这样做?由于执行垃圾收集时将调用终结器,为什么我们不能在此处添加持久性相关代码?

它表示关键(!)持久性数据。可以让终结器写入持久数据,但如果不写入此数据,则必须确定

由于缺少关键数据是不正常的,因此不应将其放入终结器

但是,当GC必须收集所有内容时,如何不调用终结器呢? 这一次,应用程序可以强制终止,这样就永远不会给GC留下运行的机会。

正如书中所解释的那样

JLS不仅不能保证终结器将获得 立即执行,不能保证他们会被执行 完全完全有可能,甚至有可能,一个程序 在不执行终结器的某些对象上终止 更长的可达性


一个主要原因是终结器忽略异常,因此,如果在持久化数据时出现任何致命异常,则可以忽略它。签出