优化代码-变量的优化(zt)

转载 2004年09月19日 14:47:00

如果您频繁存取变量,就需要考虑从何处存取这些变量。变量是 static 变量,还是堆栈变量,或者是类的实例变量?变量的存储位置对存取它的代码的性能有明显的影响?例如,请考虑下面这段代码:

  void staticAccess(int val)
  {
    for (int i=0; i

这段代码中的每个方法都执行相同的循环,并反复相同的次数。唯一的不同是每个循环使一个不同类型的变量递增。方法 stackAccess 使一个局部堆栈变量递增,instanceAccess 使类的一个实例变量递增,而 staticAccess 使类的一个 static 变量递增。

instanceAccessstaticAccess 的执行时间基本相同。但是,stackAccess 要快两到三倍。存取堆栈变量如此快是因为,JVM 存取堆栈变量比它存取 static 变量或类的实例变量执行的操作少。请看一下为这三个方法生成的字节码:

查看字节码揭示了堆栈变量效率更高的原因。JVM 是一种基于堆栈的虚拟机,因此优化了对堆栈数据的存取和处理。所有局部变量都存储在一个局部变量表中,在 Java 操作数堆栈中进行处理,并可被高效地存取。存取 static 变量和实例变量成本更高,因为 JVM 必须使用代价更高的操作码,并从常数存储池中存取它们。(常数存储池保存一个类型所使用的所有类型、字段和方法的符号引用。)

通常,在第一次从常数存储池中访问 static 变量或实例变量以后,JVM 将动态更改字节码以使用效率更高的操作码。尽管有这种优化,堆栈变量的存取仍然更快。

考虑到这些事实,就可以重新构建前面的代码,以便通过存取堆栈变量而不是实例变量或 static 变量使操作更高效。请考虑修改后的代码:

方法 instanceAccessstaticAccess 被修改为将它们的实例变量或 static 变量复制到局部堆栈变量中。当变量的处理完成以后,其值又被复制回实例变量或 static 变量中。这种简单的更改明显提高了 instanceAccessstaticAccess 的性能。这三个方法的执行时间现在基本相同,instanceAccessstaticAccess 的执行速度只比 stackAccess 的执行速度慢大约 4%。

这并不表示您应该避免使用 static 变量或实例变量。您应该使用对您的设计有意义的存储机制。例如,如果您在一个循环中存取 static 变量或实例变量,则您可以临时将它们存储在一个局部堆栈变量中,这样就可以明显地提高代码的性能。这将提供最高效的字节码指令序列供 JVM 执行。

C/C++代码被 VS 2010 优化掉了,如何关闭优化?

VS 2010编译器的自动优化打碎了多少像我这样的C++新手的幻想......... 现在将关闭优化方法共享下,告别那段快哭了的时代~~~...
  • u011109322
  • u011109322
  • 2015年07月14日 13:11
  • 5706

使用遗传算法解决多变量函数优化问题!

很多朋友在碰到多变量值优化的问题的时候不能很好的将问题转化,利用有效编码的方法将解的个数,解的编码很好的很合理的进行设计,因此不能利用遗传算法进行问题的求解!        其实,简单的来说,就是将多...
  • liuguiyangnwpu
  • liuguiyangnwpu
  • 2014年01月16日 22:17
  • 7452

Keil的代码优化产生的问题

Keil的代码优化产生的问题 转载这篇文章的原因: 今天和昨天一直为一个BUG困扰,明明我有写程序语句(还是很关键的那种),为什么keil不会生成响应的汇编语句。 看见132的红色...
  • u011368821
  • u011368821
  • 2013年12月11日 22:54
  • 1887

编译原理结构框架10代码优化

第十章 代码优化   重点:代码优化的任务,局部优化、循环优化、全局优化的基本方法。 难点:控制流分析,数据流分析。   10.1 优化的种类 n   机器相关性 机器相关优化:寄存器优...
  • hit_rxz
  • hit_rxz
  • 2014年12月03日 21:19
  • 890

C中的volatile用法(允许随时都会改变的值,且不可优化)

转自: C中的volatile用法 volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化...
  • u011170660
  • u011170660
  • 2014年08月01日 22:40
  • 617

一些代码优化的方法

谈到优化,很多人都会直接想到汇编。难道优化只能在汇编层次吗?当然不是,C++层次一样可以作代码优化,其中有些常常是意想不到的。在C++层次进行优化,比在汇编层次优化具有更好的移植性,应该是优化中的首选...
  • mydear_11000
  • mydear_11000
  • 2016年01月13日 14:30
  • 2017

VC++代码执行速度优化

本文主要整理MSDN几篇关于VC++编译器优化的几篇文章,试验并总结了一个简单易用的VC++代码优化的攻略。 一、基础知识     VC++代码优化分为两类:代码大小优化和代码速度优化。本文主要关...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2017年02月24日 09:58
  • 841

优化代码的重要性

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/45131085 工作将近一年...
  • pistolove
  • pistolove
  • 2015年04月19日 17:55
  • 6240

关于C++Release后的优化感想

最近学了点汇编,虽然写不出什么代码,但是好歹看懂一点了。于是突然想去看看C++对代码优化到什么程度。 首先看debug,debug是完全没有什么优化了,除此之外还加了很多检测的过程,难怪效率那么低。...
  • fg5823820
  • fg5823820
  • 2013年11月12日 23:33
  • 2338

项目开发之代码优化

web编程,代码优化问题是一个值得探讨的问题。
  • u012466304
  • u012466304
  • 2015年12月05日 23:59
  • 953
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:优化代码-变量的优化(zt)
举报原因:
原因补充:

(最多只允许输入30个字)