Related articles |
---|
i++ in Java eddy@mip.sdu.dk (Eddy Truyen) (2000-02-05) |
Re: i++ in Java scarroll@csrd.uiuc.edu (Steven Carroll) (2000-02-05) |
Re: i++ in Java eddy@mip.sdu.dk (Eddy Truyen) (2000-02-10) |
Re: i++ in Java eddy@mip.sdu.dk (Eddy Truyen) (2000-02-10) |
From: | Steven Carroll <scarroll@csrd.uiuc.edu> |
Newsgroups: | comp.compilers |
Date: | 5 Feb 2000 23:10:06 -0500 |
Organization: | University of Illinois at Urbana-Champaign |
References: | 00-02-021 |
Keywords: | Java, code |
Eddy Truyen wrote:
> Hi there,
>
> javac compiles statements like i++, i-- and similar to optimized byte
> code. This means that the resulting bytecodes are not the same when
> compiling i=i+1;
> Is their anyway to turn this off?
> I looked and at first glance their seems to be an option -O to optimize
> the compiler, but no option that leads to compiling only 'clean' code
> without dupx statements that insert elements within the Java stack
Dupx statements are used for more than just optimizations. say you
have the sequence:
new java/lang/String
dup
invokevirtual (some string function) // note invokevirtual takes the object
off the stack
invokevirtual (some other string function)
The only way I can think of to perform the same optimization is:
new java/lang/String
astore_0
aload_0
invokevirtual (Some string function)
aload_0
invokevirtual (some other string function)
I don't really think that's any cleaner, so I doubt there is an option
to do that. Java Bytecode is a stack based architecture, so naturally
the generated code is stack like and doesn't do all that loading and
storing that is common in load/store architectures.
As far as i++ goes, iinc (the optimized bytecode you refer to)is
pretty straightforward. You are correct though. I was surprised that
i = i + 1 is not translated to the same thing as i++. javac is not
known for its powerful optimization though.
STEVE
Return to the
comp.compilers page.
Search the
comp.compilers archives again.