Java 终结器导致可移植性问题-如何?

Java 终结器导致可移植性问题-如何?,java,finalizer,Java,Finalizer,有效的Java项目7说,终结器会导致可移植性问题 终结器是不可预测的,通常是危险的,并且通常是不必要的。 它们的使用会导致行为不稳定、性能低下和可移植性问题 但我无法理解Java是独立于平台的,终结器如何导致可移植性问题 终结器通常包含释放非JVM(系统)资源的代码。如果将资源管理委托给他们,他们会创建非常不寻常的资源生命周期模式(大量不必要的开放资源+一次释放数千个资源)。这听起来确实很危险,在每一个尚未测试的平台上,它都会带来不可预测的中断威胁。终结器通常包含释放非JVM(系统)资源的代码。

有效的Java项目7说,终结器会导致可移植性问题

终结器是不可预测的,通常是危险的,并且通常是不必要的。 它们的使用会导致行为不稳定、性能低下和可移植性问题


但我无法理解Java是独立于平台的,终结器如何导致可移植性问题

终结器通常包含释放非JVM(系统)资源的代码。如果将资源管理委托给他们,他们会创建非常不寻常的资源生命周期模式(大量不必要的开放资源+一次释放数千个资源)。这听起来确实很危险,在每一个尚未测试的平台上,它都会带来不可预测的中断威胁。

终结器通常包含释放非JVM(系统)资源的代码。如果将资源管理委托给他们,他们会创建非常不寻常的资源生命周期模式(大量不必要的开放资源+一次释放数千个资源)。这听起来确实很危险,在每个尚未测试过的平台上,它都会带来不可预测的崩溃威胁。

例如,您可能会在一个系统上测试代码,该系统一次允许打开20000个文件,并且内存相对较少(因此更频繁地进行GC,从而完成),但您的客户所使用的系统一次只允许打开10000个文件,并且内存更大(因此GC更少,文件关闭的频率更低)。在这种情况下,在您的测试环境中一切正常,但在您客户的站点上会失败(由于文件句柄已用完)。例如,您可能在一个系统上测试代码,该系统一次允许打开20000个文件,并且内存相对较少(因此更频繁地执行GC并最终确定),但您的客户所使用的系统一次只允许打开10000个文件,并且内存更大(因此GC更少,文件关闭的频率更低)。在这种情况下,在您的测试环境中工作正常,但在您客户的站点上会失败(由于文件句柄已用完)