静态块与静态方法 - 初始化静态字段

2023-12-28

出于好奇,我测量了静态块和静态方法初始值设定项之间的性能。首先,我在两个单独的 java 类中实现了上述方法,如下所示:

First:

class Dummy {
    static java.util.List<Integer> lista = new java.util.ArrayList<Integer>();
    static {
        for(int i=0; i < 1000000; ++i) {
            lista.add(new Integer(i));
        }
    }
}

public class First {
    public static void main(String[] args) { 
        long st = System.currentTimeMillis();
            Dummy d = new Dummy();
        long end = System.currentTimeMillis() - st;
        System.out.println(end);    
    }
}

Second:

class Muddy {
    static java.util.List<Integer> lista = new java.util.ArrayList<Integer>();
    public static void initList() {
        for(int i=0; i < 1000000; ++i) {
            lista.add(new Integer(i));
        }
    }
}

public class Second {
    public static void main(String[] args) { 
        long st = System.currentTimeMillis();
            Muddy.initList();
            Muddy m = new Muddy();
        long end = System.currentTimeMillis() - st;
        System.out.println(end);    
    }
}

然后我执行了this http://codepad.org/7plqLRVD小批处理脚本来测量 100 次并将值放入文件中。batchFile.bat First Second dum.res.txt

之后我写了this http://codepad.org/YmME2Df4用于计算 Dummy 和 Muddy 测量值的平均值和标准偏差的代码。

这是我得到的结果:

First size: 100 Second size: 100
First       Sum: 132    Std. deviation: 13
Second      Sum: 112    Std. deviation: 9

在我的其他机器上也是类似的......每次我测试它时。

现在我想知道,为什么会这样呢?我检查了字节码,Second.class 在调用 System.currentTimeMillis() 之间多了一条指令(调用静态 initList())。 他们都做同样的事情,但为什么第一个慢呢?仅通过查看字节码我无法真正推理出来,因为这是我第一次接触javap;我还不懂字节码。


我认为静态块版本比静态方法版本慢的原因可能是由于它们获得的不同的 JIT 优化......

请参阅这篇有趣的文章以获取更多有趣的信息:Java 秘密:静态块会被解释吗? http://vanillajava.blogspot.com/2011/07/java-secret-are-static-blocks.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态块与静态方法 - 初始化静态字段 的相关文章

随机推荐

  • Python - 确定 3 个范围的重叠

    我有一个问题 关于如何在不使用任何现有库的情况下确定 Python 中三个范围的重叠 例如 如果我有三个范围 10 20 15 25 18 30 我应该如何找到它们之间的重叠 我的答案应该是 18 19 20 任何帮助将非常感激 谢谢 重叠
  • Paypal 快速结账错误 订单总额缺失。错误10400

    我有问题 我正在尝试将多个商品发送到 Paypal 但它显示 订单总数丢失 10400 错误 版本 76 0我正在贝宝沙箱上测试我的请求 AMT 106 72 RETURNURL http 3A 2F mydomainname com 2F
  • 两个不同区域内的实验数据拟合

    我正在拟合一组实验数据 sample https docs google com spreadsheets d 1JOw7bDwWWXSkR uU2aELrxx33bdqfR1nVci w1VFUOw edit usp sharing 在两
  • 比较Python中的大量字典列表

    我从来没有想过我会遇到 python 的速度问题 但我确实遇到了 我正在尝试根据字典值来比较非常大的字典列表 我比较两个列表 第一个列表如下 biglist1 transaction somevalue id somevalue date
  • 如何使用 ObservableCollection 源实现 XAML 单选按钮控件?

    我有以下内容ComboBoxXAML 中的元素
  • 使用 Readiness Probe 和 RollBack 策略的 Kubernetes 0 停机时间不起作用

    我已经在 Kubernetes 上设置了一个 Node 应用程序 我正在运行单个副本 并且希望在更新映像时停机时间为 0 我使用更新我的 Podset Image在 Kubernetes 上 set image deployment dev
  • Payola 问题:nil:NilClass 的未定义方法“amount”

    我刚刚学习如何使用 Payola 为我的 RoR 5 1 5 测试应用程序创建订阅 我正在按照 wiki 上的说明进行操作 我已经设置了从 Wiki 上的示例中获取的示例表单 并将其直接放入 app views subscriptions
  • 从 RStudio 访问命令行 (cmd)

    在我在 R 下的工作中 我需要调用另一个软件 ANSYS 为此 我正在 R 下寻找一个允许访问命令行窗口 cmd 的命令 例如 在 matlab 下 字符 允许执行此操作 谢谢 您可以使用system system2 or shell在 W
  • IBOutlet 声明?

    我已经看到下面的代码以 3 种不同的方式编写 关于 IBOutlet 这有关系吗 我想说将 IBOutlet 添加到声明和 property 中会更简洁 只是财产 class SwitchViewController interface i
  • 关于对象比较

    我有一个 java 类 Rec 我有两个实例 Rec1 和 Rec2 我想检查 Rec1 和 Rec2 的值是否相等 如果我这样做 Rec1 equals Rec2 是正确的做法吗 class Rec private BigDecimal
  • 如何从 URL 参数获取 unicode 字符?

    我需要使用 GET 请求通过 JavaScript 客户端将 JSON 发送到我的服务器 因此我开始回显响应以确保翻译过程中不会丢失任何内容 普通文本似乎没有问题 但是一旦我包含任何类型的 Unicode 字符 例如 该字符就会以某种方式编
  • JavaScript:回调函数参数与其他变量同名?

    var str internet performAction function str console log str 私有变量有问题吗str并且还有一个带有同名参数的回调函数 Thanks 这只是一个标准范围的情况 它是作为参数传递给另一
  • Android 机器未联网

    当我的应用程序连接到 WiFi 网络时 我在运行网络服务时遇到问题 我收到以下异常 java net SocketException socket failed ENONET Machine is not on the network 在下
  • 是否可以在不使用图像映射软件的情况下获得图像映射的坐标?

    我正在学习 html css 令我困惑的一件事是图像映射的想法 我该如何获取图像一部分的坐标并将其插入我的区域标签而不使用像 gimp 这样的图像映射软件 使用 gimp 的图像映射工具确实很有用 但我担心将来我需要知道如何在没有 gimp
  • 在 python 中从密码生成 RSA 密钥

    我希望能够生成并再生相同的 RSA 密钥password 和盐 单独在python 目前我正在使用 pycrypto 进行此操作 但是 它似乎并不能单独从密码生成相同的密钥 原因似乎是当 pycrypto 生成 RSA 密钥时 它在内部使用
  • 带有结构和空元胞数组的 MATLAB“bug”(或非常奇怪的行为)

    我不知道这里发生了什么事 我用的是R2006b 在我提交错误报告之前 拥有较新版本的人是否有机会测试一下他们是否获得相同的行为 code bug1 m function bug1 S struct nothing something add
  • JavaScript 正则表达式替换字符序列

    我想在这种特定情况下用下划线替换字符串开头和结尾的所有空格 var a console log myReplace a prints 即 第一个 之前的字符串开头的所有空格以及最后一个 之后的所有空格 其他所有内容 包括字符串中间的空格 保
  • Django/Python 循环模型参考

    好的 所以我正在尝试编写组织良好的代码 并实际制作单独的 django 应用程序 而不是将所有内容集中到 1 个应用程序中 我的问题是我有 3 个应用程序 每个应用程序都引用下一个应用程序中的 1 个其他模型 所以基本上我有一个无限循环 应
  • 如何在matplotlib中制作较粗的茎线

    我想在使用时在 python 中制作更粗的茎线plt stem 这是我的代码 import matplotlib pyplot as plt import numpy as np N 20 n np arange 0 2 N 1 x np
  • 静态块与静态方法 - 初始化静态字段

    出于好奇 我测量了静态块和静态方法初始值设定项之间的性能 首先 我在两个单独的 java 类中实现了上述方法 如下所示 First class Dummy static java util List