zoukankan      html  css  js  c++  java
  • 今日思考之 20200614:java 中 null 是否对 gc 有帮助?

    先上一张图~~~

    (from 《深入理解java虚拟机 第二版》Charter 8.2.1 局部变量表)

    如上图中文字描述所说,null 之“奇技”在于对一些栈帧很长的方法来说,提早将前面一些不用的大对象设为 null 确实是可以加速垃圾回收的。

    思考1:什么情况下,会有在调用一个耗时长的方法之前可以回收前面的大对象呢?——只有当我们的方法中,有多次调用外部方法,那么我们就可以在每次调用这些外部方法时用“null 的奇技”回收一下这个外部方法中用不到的大对象。

    思考2:什么情况下调用外部方法不需要前面的对象?——我猜测是产生了一些中间对象,即对象经过几次“包装”才最终使用,那么中间就有一些“不小不大”的对象产生。

    思考3:那什么情况下一个方法中多次调用外部方法?——第一种情况,封装不合理,没有将方法抽象出来,导致方法过长;第二种情况,业务的聚合接口,这类接口需要聚合多方信息,不得不调用多个外部方法,如果产生了过多中间对象(如思考2中所提)那么可以用这个“null 奇技”回收。

    思考4:这个“null的奇技淫巧”能够普遍适用吗???(有垃圾代码的嫌疑)

    再引用《深入理解java虚拟机 第二版》Charter 8.2.1 局部变量表 中的资料,如下图:

    从上图中我们了解到,周志明大大并不赞成将这种“null奇技淫巧”作为一种普遍的编码规则来推广。(它就是有可能成为垃圾代码的)JVM 通过 JIT 已经对这类情况进行了优化。

  • 相关阅读:
    简析Java RMI 与 .NET Remoting
    实现一个压缩Remoting传输数据的Sink:CompressionSink (转载)
    智能部署与更新
    第二章:.NET Remoting基础知识
    创建以Microsoft .NET Remoting为基础的分布式应用架构
    vs2005如何防止代码被反编译
    使用.NET Remoting开发分布式应用——配置文件篇(转载)
    Remoting概述
    高级 .NET Remoting
    第一章:Remoting技术简介
  • 原文地址:https://www.cnblogs.com/christmad/p/13124907.html
Copyright © 2011-2022 走看看