Carsten Ziegeler wrote:

Berin Loritsch  wrote:

Hmm, just curious. If we would create BCEL proxies wouldn't
the performance problem go away?

There is BCEL proxy generating code in there already (still some minor issues, but decent enough).

The BCEL code was significantly faster than reflection based
dynamic proxies, but there is still a considerable overhead to
BCEL proxies.  I can't remember if the price was 5 to 1 or 3 to 1
for the BCEL proxies.


Ok, I have not looked at the BCEL code yet, but my thought was that it works this way: Imagine you have an interface A with one method do(), you create a proxy that implements interface A as well, holds a reference to the wrapped component and calls inside its own do() method, simply the do() method of the wrapped object. Is it this way? If so, I wouldn't understand the performance problem :)

This is the rough equivalent of what BCEL generates:

class BCELGeneratedProxy implements A
{
    private final A m_proxy;

    public BCELGeneratedProxy(A proxy)
    {
        m_proxy = proxy;
    }

    public void do()
    {
        m_proxy.do();
    }
}

Do keep in mind that there is a heavy penalty for creating classes with
BCEL due to the class compilation time.  There is still a penalty
involved with the wrapper class.  I'm not sure if it is because hotspot
is not recompiling or inlining it or if there is some other technical
issue I am not aware of.  I will say that BCEL programming is a royal
pain.  While I believe this is what is happening, there could be some
gotchas that I am not aware of that sap the performance.

--

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
- Rich Cook


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
Apache Excalibur Project -- URL: http://excalibur.apache.org/



Reply via email to