如果我finalize()
从程序代码中调用一个对象,那么当垃圾回收器处理该对象时, JVM是否 还会再次运行该方法?
这是一个大概的例子:
MyObject m = new MyObject();
m.finalize();
m = null;
System.gc()
是否要显式调用以finalize()
使 JVM 的垃圾回收器不对finalize()
对象运行该方法m
?
根据这个简单的测试程序,即使您显式调用了JVM,JVM仍将对finalize()进行调用:
private static class Blah
{
public void finalize() { System.out.println("finalizing!"); }
}
private static void f() throws Throwable
{
Blah blah = new Blah();
blah.finalize();
}
public static void main(String[] args) throws Throwable
{
System.out.println("start");
f();
System.gc();
System.out.println("done");
}
输出为:
开始
定案!
定案!
完成
那里的每个资源都说永远不要显式地调用finalize(),甚至几乎永远都不会实现该方法,因为无法保证何时以及何时调用它。最好只手动关闭所有资源。
我正在调试我的web应用程序,我有一个POST请求。(使用ajax,使用xhrfields:{withcredentials:true})。dataType是'application/json',我的服务器是tomcat,我手动将我的“Access-Control-Allog-Origin”标头设置为“http://localhost:8080”。 跨源请求被阻止:同一源策略不允许读取http:/
在我正在进行的理解DNS的实验中,我试图理解名称服务器如何进行递归查询。我得到了基本的想法-你从一个顶级dns服务器开始,然后它向你发送一个要联系的权威名称服务器列表,然后你联系这些服务器,等等,直到你得到一个权威的响应。 听起来很简单。 但当我在实践中尝试时,我在第一步后就卡住了。我只是使用命令行工具手动执行此操作-(我确保关闭递归) 好的,那么第1步:从根名称服务器开始。我从维基百科的根名称服
问题内容: 如果您曾经参与过Salesforce项目的部署或为SF项目设置持续集成,那么您应该知道,在部署元数据组件(类,页面等)之后,您通常还需要执行一些手动任务,例如填充自定义设置值或设置配置文件的字段级安全性。有很多这样无聊的动作。 在我当前的项目中,我再次面对它,我正在寻找如何最大程度地自动化它的方法。为了将项目部署到Org,我们使用Jenkins + Git。因此,我希望例如在每次部署后
根据我的理解,如果Java解释器单独开始逐行执行字节码,那么性能将很慢,因此JIT将出现在代码优化中,以加快代码的执行。 JIT编译器优化代码,java解释器逐行翻译优化的代码。由于JIT只在运行时运行,所以我们不会得到任何二进制输出。一旦解释器翻译,就会产生二进制代码。 ---现在我的问题是,JIT和JAVA解释器一起工作吗?或者,jit编译器首先工作,然后java解释器开始工作? 请确认这一点
我有一个Kafka侦听器,它实现了具有以下属性的确认消息侦听器接口: 确认模式-手动_立即 IDLEEVENTERVAL-3分钟 在监听器上使用消息时,它决定是否通过acknowledgment.acknowledge()来获取特定记录,并按预期工作。 此外,我还有一个场景,在X分钟后确认最后一个偏移量(将其保留在内存中)(如果没有消息到达)。为了克服这个要求,我决定使用ListenerConta
FTP的vb代码非常简单: 有人知道这是脚本任务的问题还是sql代理的问题吗?