Java终止函数详解

Java终止函数是什么?

对于对象而言,Java 终止函数履行最后的确认工作。这与Java 结构函数是相反的,Java 结构函数创 建以及初始化了一个Java类实例。当一个对象不在被需要以及这些资源必须被用于其它对象的时候,在一 个类实例或者发行的系统资源,比如说文件描述符或者网络插孔连接上,Java 终止函数可以被用来清除 任务。你不需要证据或者为终止函数返回任何值。遗憾的是当一个类或者接口被载入的时候,目前的Java 语言的介绍中没有任何关于终止函数用于Java类或者接口的解释。让我们进一步研究一下java.lang对象 的终止函数finalize()方法,提供一个方法实例。(如何使用PHP5中的Clone函数)

protected void finalize() throws Throwable

当一个Java对象不再被需要的时候,这个对象原先占有的空间就会期望能够自动的由Java回收工具进 行回收利用。这在Java中有着显著的差异,并且在大多数的结构性程序语言,比如说C语言中,是不常见 的。如果一个类实例实施终止函数finalize()方法,它所占用的空间就不能及时的被回收工具重新回收利 用。最坏的情况是也许它根本就不再被回收了。任何实施终止函数finalize() 方法的类实例都经常调用 终止对象。当它们不再被引用的时候,它们不能立即被Java回收工具回收,为最终程序Java回收工具将对 象附加到指定的队列。通常是由一个指定的线性程序执行的,在一些Java虚拟机上被称为“参考句柄”。 在最终程序阶段,“终止函数”线性程序会执行每一个对象的终止函数finalize()方法。finalize() 成 功执行之后Java回收工具将会交付对象,将它所占用的空间由“future”碎片收集功能再生。我没有说“ 现有”,这意味着至少两个碎片收集周期必须被要求用来回收终止对象。听起来这像是有一些消耗的?正 确。我们需要一些方法使得空间能够重新利用。

线性终止函数在系统中没有被给予最大优先权。优先级更高的线程导致终止对象被排列,如果一个线 性“Java终止函数”无法与这个效率保持一致,终止函数队列就会持续增长,导致Java堆不停的被堆积。 最终Java堆将会被耗尽,并且java.lang.OutOfMemoryError将会被扔掉。

对于任何对象而言,一个Java虚拟机将不会超过一次的引用终止函数finalize()方法。如果finalize ()方法抛来了什么例外现象,对象的终止程序就会停止下来。

对于类的finalize()方法你几乎可以自由的做任何事情。当你这样做的时候,当对象不再被引用或者 不再需要的时候,请不要期望存储空间会被任何一个由Java回收程序回收再生的对象占领。为什么? finalize()方法将要完整的按进度完成的这种情况是不可控的。最坏的情况是,当这里没有更多涉及到对 象的时候,也许它甚至不会被解决。这意味着任何具有finalize()方法的对象被回收都是无法被保障的。 这是内存管理发展的一个潜在危险,不必多说,有相当大的开销是花费在队列排列、运行finalize()方法 以及将对象反射到下一个碎片整理环节上的。

如果你想在对象上运行函数,考虑到终止函数作为最后一个方法,执行你自己的清理垃圾方法,这将 会更加的平稳。完全信任终止函数来进行事后的垃圾清理工作是非常危险的,特别是当你的终止对象涉及 到本地资源的时候。

Java 终止函数的实际操作体验

ObjectWYieldFinalizer内,我们可以伴随着线性yield()执行finalize()方法,这样finalize()就不 能完全执行,见代码表一。线性yield()方法从正在运行的程序中阻止现有的线性程序执行,以及允许其 它的线性程序执行。如果终止函数线性程序调用这种finalize()方法,它将会暂停执行。

时间: 2024-08-03 07:55:11

Java终止函数详解的相关文章

java split()函数详解

java split()函数详解 public string[] split(string regex,int limit)根据匹配给定的正则表达式来拆分此字符串. 此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止.数组中的子字符串按它们在此字符串中的顺序排列.如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串 */  string[] timefirs=new string[3];  string timefi

Java中文问题详解,底层编码解剖

编码|问题|详解|中文 Java中文问题详解预备知识: 1.字节和unicode Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式 是使用字节流的. 因此Java要对这些字节流经行转化.char是unicode的,而byte是字节. Java中byte/char互转的函数在sun.io的包中间有.其中ByteToCharConverter类是中调度, 可以用来告诉你,你用的Convertor.其中两个很常用的静态函数是 public static By

java RMI原理详解

[本文转载自java RMI原理详解] 定义 RMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法. 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中. Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序

Java反射机制详解_java

本文较为详细的分析了Java反射机制.分享给大家供大家参考,具体如下: 一.预先需要掌握的知识(java虚拟机) java虚拟机的方法区: java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存储被装载的类 的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文件,然后将其读入到java虚拟机中,紧接着虚拟机提取class 中的类型信息,将这些信息存储到方法区中.这些信息主要包括: 1.这个类型的全

Java并发控制机制详解_java

在一般性开发中,笔者经常看到很多同学在对待java并发开发模型中只会使用一些基础的方法.比如Volatile,synchronized.像Lock和atomic这类高级并发包很多人并不经常使用.我想大部分原因都是来之于对原理的不属性导致的.在繁忙的开发工作中,又有谁会很准确的把握和使用正确的并发模型呢? 所以最近基于这个思想,本人打算把并发控制机制这部分整理成一篇文章.既是对自己掌握知识的一个回忆,也是希望这篇讲到的类容能帮助到大部分开发者.  并行程序开发不可避免地要涉及多线程.多任务的协作和

java 多线程-锁详解及示例代码_java

自 Java 5 开始,java.util.concurrent.locks 包中包含了一些锁的实现,因此你不用去实现自己的锁了.但是你仍然需要去了解怎样使用这些锁. 一个简单的锁 让我们从 java 中的一个同步块开始: public class Counter{ private int count = 0; public int inc(){ synchronized(this){ return ++count; } } } 可以看到在 inc()方法中有一个 synchronized(th

javascript中Array()数组函数详解_javascript技巧

在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只能存放同一类型或其子类型元素,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. Array()是一个用来构建数组的内建构造器函数.数组主要由如下三种创建方式: array = new Array() array =

Python实现屏幕截图的代码及函数详解_python

废话不多说,先给大家看下python实现屏幕截图的代码,具体代码如下所述: from selenium import webdriver import time def capture(url, save_fn="capture.png"): browser = webdriver.Firefox() # Get local session of firefox browser.set_window_size(1200, 900) browser.get(url) # Load pag

js正则表达式常用函数详解(续)_正则表达式

正则表达式对象的方法 1.test,返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式.如果存在则返回 true,否则就返回 false. 2.exec,用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组. 3.compile,把正则表达式编译为内部格式,从而执行得更快.正则表达式对象的属性 1.source,返回正则表达式模式的文本的复本.只读. 2.lastIndex,返回字符位置,它是被查找字符串中下一次成功匹配的开始位置. 3.input ($_),返回执