正在阅读:JAVA经验谈:尽可能使用堆栈变量JAVA经验谈:尽可能使用堆栈变量

2004-09-01 10:24 出处:CSDN 作者:chensheng913 责任编辑:linjixiong

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

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


  class StackVars
  {
  //与前面相同...
  void instanceAccess(int val)
  {
  int j = instVar;
  for (int i=0; i<val; i++)
  j += 1;
  instVar = j;
  } 
  
  void staticAccess(int val)
  {
  int j = staticVar;
  for (int i=0; i<val; i++)
  j += 1;
  staticVar = j;
  }
  }   

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

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

  





察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:
键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品