热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JAVA静态字段用法_java–静态最终字段,静态字段和性能

即使认为这不是它的主要目的,我一直认为final关键字(在某些情况下和VM实现中)可以帮助JIT.这可能是一个都市传奇,但我从未想过,设置场地决赛可能会对表现产生负面影响.直到我碰

即使认为这不是它的主要目的,我一直认为final关键字(在某些情况下和VM实现中)可以帮助JIT.

这可能是一个都市传奇,但我从未想过,设置场地决赛可能会对表现产生负面影响.

直到我碰到这样的代码:

private static final int THRESHOLD = 10_000_000;

private static int [] myArray = new int [THRESHOLD];

public static void main(String... args) {

final long begin = System.currentTimeMillis();

//Playing with myArray

int index1,index2;

for(index1 = THRESHOLD - 1; index1 > 1; index1--)

myArray[index1] = 42; //Array initial data

for(index1 = THRESHOLD - 1; index1 > 1; index1--) {

//Filling the array

for(index2 &#61; index1 <<1; index2

myArray[index2] &#43;&#61; 32;

}

long result &#61; 0;

for(index1 &#61; THRESHOLD - 1; index1 > 1; index1-&#61;100)

result &#43;&#61; myArray[index1];

//Stop playing,let&#39;s see how long it took

System.out.println(result);

System.out.println((System.currentTimeMillis())-begin&#43;"ms");

}

我们来看看&#xff1a;

private static int [] myArray &#61; new int [THRESHOLD];

在W7 64位下,基于10次连续运行,我得到以下结果&#xff1a;

> THRESHOLD &#61; 10 ^ 7,1.7.0u09客户端VM(Oracle)&#xff1a;

>当myArray不是最终版时,运行时间约为2133毫秒.

>当myArray成为最终版时,运行时间约为2287毫秒.

> -server VM产生类似的数字,即2131ms和2284ms.

> THRESHOLD &#61; 3×10 ^ 7,运行在~7647ms.

>当myArray最终时,在~8190ms运行.

> -server VM产生~7653ms和~8150ms.

> THRESHOLD &#61; 3×10 ^ 7,1.7.0u01客户端VM(Oracle)&#xff1a;

>当myArray不是最终版时,运行在~8166ms.

>当myArray是最终版时,运行时间约为9694ms.这差异超过15&#xff05;&#xff01;

> -server VM产生了可忽略的差异,有利于非最终版本,大约1&#xff05;.

备注&#xff1a;我使用JDK 1.7.0u09的javac生成的字节码进行所有测试.除了myArray声明之外,两个版本生成的字节码完全相同,这是预期的.

那么为什么带有静态最终myArray的版本比带有静态myArray的版本慢&#xff1f;

编辑(使用Aubin的我的代码片段版本)&#xff1a;

似乎版本与final关键字之间的差异与不仅仅在第一次迭代中的差异.不知何故,具有final的版本总是比没有第一次迭代时的版本慢,然后下一次迭代具有相似的时序.

例如,使用THRESHOLD &#61; 10 ^ 8并使用1.7.0u09客户端运行时,第一次计算需要大约35秒,而第二次“仅”需要30秒.

显然,VM执行了一个优化,是JIT在运行,为什么它没有提前启动(例如通过编译嵌套循环的第二级,这部分是热点)&#xff1f;

请注意,我的备注对1.7.0u01客户端VM仍然有效.对于那个版本(也许是早期版本),带有final myArray的代码比没有此关键字的代码运行得慢&#xff1a;2671ms vs 2331ms,基于200次迭代.



推荐阅读
author-avatar
娅丶0k_732
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有