相关疑难解决方法(0)


finalize()在Java 8中调用强可达对象

我们最近将我们的消息处理应用程序从Java 7升级到Java 8.自升级以来,我们偶尔会遇到一个流在读取时被关闭的异常.记录显示终结器线程正在调用finalize()保存流的对象(进而关闭流).

代码的基本概要如下:

MIMEWriter writer = new MIMEWriter( out );
in = new InflaterInputStream( databaseBlobInputStream );
MIMEBodyPart attachmentPart = new MIMEBodyPart( in );
writer.writePart( attachmentPart );
Run Code Online (Sandbox Code Playgroud)

MIMEWriter并且MIMEBodyPart是本土MIME/HTTP库的一部分. MIMEBodyPart扩展HTTPMessage,具有以下内容:

public void close() throws IOException
{
    if ( m_stream != null )
    {
        m_stream.close();
    }
}

protected void finalize()
{
    try
    {
        close();
    }
    catch ( final Exception ignored ) { }
}
Run Code Online (Sandbox Code Playgroud)

异常发生在调用链中MIMEWriter.writePart,如下所示:

  1. MIMEWriter.writePart() 写入部件的标题,然后调用 part.writeBodyPartContent( this )
  2. MIMEBodyPart.writeBodyPartContent()调用我们的实用工具方法 …

java garbage-collection finalize finalizer java-8

22
推荐指数
1
解决办法
2182
查看次数

并发标记和扫描算法详细信息

我正在努力理解并获得有关CMS终身收集周期所涉及的步骤的更多细节.

  1. 初始标记
  2. 并行标记
  3. 同时预清洁
  4. 备注
  5. 并发扫描
  6. 并发重置

这些步骤在很多地方都很简短.但是,如果我必须在一个带有图表和伪示例的类中描述它们,我可以从哪里获取信息?

PS - 我在谷歌上进行了广泛的搜索,它引发了许多文字的东西和我理解的行话.但我正在寻找一个更动画的解释,以便我可以教我的观众.

这些是一些流行的链接,第三个很有前途,但它没有特别解释CMS

  1. http://www.infoq.com/articles/Java_Garbage_Collection_Distilled
  2. http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
  3. http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/

亲爱的,感谢评论并指出了一些资源.我试图创建CMS步骤的直观表示,如果符合您的理解,请告诉我?

此外,我似乎错过了压缩步骤,它属于哪一步?

:好的,所以压缩不是由CMS处理的,而是委托给完整的GC.

CMS GC的阶段

java garbage-collection

16
推荐指数
1
解决办法
4007
查看次数