Java 常量折叠

原创 2018年04月17日 14:56:12

比较代码:  A:int a = 1+2;  B:int a =3;

A与B,在程序运行时,使用的cpu时间是完全一样的。为什么?

javac编译代码过程如下:


在javac编译代码过程中,在进行语法分析中,编译阶段(java代码编译为class字节码文件的过程中)会进行把1+2,计算成结果3,存放到语法树中。该现象称之为常量折叠。

我们运行阶段,直接从语法树中读指令,此时直接读到的就是3的结果。所以,A与B的在运行阶段的cpu消耗时间是没有区别的。

(摘自 深入理解Java虚拟机 -早期(编译期)优化章节)

版权声明:本文为博主原创文章,转载请注明博客地址与作者。 https://blog.csdn.net/jiao_zg/article/details/79974653

Java之常量折叠

常量折叠是Java在编译期做的一个优化,简单的来说,在编译期就把一些表达式计算好,不需要在运行时进行计算。 比如: int a = 1 + 2,经过常量折叠后就变成了int a = 3。 我们举个...
  • feigeswjtu
  • feigeswjtu
  • 2018-01-07 19:28:32
  • 107

编译器编译优化---常量传播和常量折叠

(1)  常量传播     故名思议,在编译优化时,将能够计算出结果的变量直接替换为常量。    如:  void main()          { int a = 1; printf("...
  • ainideriziyq1983
  • ainideriziyq1983
  • 2015-08-08 00:17:20
  • 1384

const变量-常量折叠-符号表

转载自: 一、结论 声明:不同于C语言的const变量修改问题(可以通过指针间接修改const变量的值),这里只讨论C++ 里的const。 C++ const 修饰符,表示常量,即如果...
  • smilesundream
  • smilesundream
  • 2017-09-08 16:31:11
  • 377

c++学习----const常量折叠

//============================================================================ // Name : Cons...
  • jackywgw
  • jackywgw
  • 2017-08-24 17:35:03
  • 176

C++ 常量折叠和C语言中const常量对比

#include  using namespace std; int main(int argc, char *argv[]) {   const int a = 10;   int *p ...
  • lingzhm
  • lingzhm
  • 2015-08-22 20:21:14
  • 604

常量叠算(Constant folding),还是叫常量合并更合适点,呵呵

今天刚学到,以此为记。先看一个例子:const int c=111;int& r=const_cast(c);int* p=const_cast(&c);coutcoutcoutr=222;coutc...
  • rainharder
  • rainharder
  • 2007-09-26 15:21:00
  • 885

Java常量折叠

常量折叠是Java在编译期间做的一个优化,简单的来说就是在编译期就把一些表达式计算好,不需要在运行时进行计算。 对于如下代码: String s1 = "a" + &quo...
  • lgh1992314
  • lgh1992314
  • 2018-01-13 14:25:23
  • 126

C++中的常量折叠问题

最近做了一道笔试题才发现了这个问题 题目: const int a = 10;// 这这里声明的变量a 就会产生常量重叠。 int *p = (int *)&a; *p = 20; cout ...
  • peixuan197
  • peixuan197
  • 2015-08-31 15:11:55
  • 659

GCC的优化效果测试:2

记得很久以前,有这么一道题:计算从1到100的和。 这道题一般是用来作为普通编程教学的循环这部分的内容的引导,同时用来作为计算机可以“重复进行计算”的证明。 一般的循环解法很直白: ...
  • CherylNatsu
  • CherylNatsu
  • 2012-09-09 19:20:45
  • 1855

关于常量折叠

首先来看一个例子: int main(int argc, char* argv[]) { const int i=0; int *j = (int *) &i; *j=1; cout c...
  • q3733353520
  • q3733353520
  • 2014-05-05 10:28:35
  • 488
收藏助手
不良信息举报
您举报文章:Java 常量折叠
举报原因:
原因补充:

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