[Design of AOP on JBoss (Aspects/JBoss)] - Re: Optimizing genrated advisors
by flavia.rainone@jboss.com
The creation of stress tests are great news for JBoss AOP.
These results are already encouraging, even because they are just initial tests, being run against code that we intend to improve.
Regarding the per_instance issue, I agree with the idea of differentiating domains that haven't overriden the bindings from those that have.
We could store the generated joinpoint classes in a WeakHashMap, where we would map the list of advices/interceptors to the generated class. That way, if:
| the joinpoint class is replaced by another one, due to dynamic operations -> the class would eventually be removed from the map
| two or more per instance domains (with overriden bindings) happen to have the same collection of advices/interceptors to apply to the same joinpoint -> the needed joinpoint class would be generated only once
| two or more instances have a non-overriden domain -> the needed joinpoint class would be generated only once
|
|
| Plus, after making generated advisors work 100% with hotswap, I suggest that, only in hotswap mode, we do the advices call inside the wrapper instead of a joinpoint class. This way, we would avoid the extra call to the joinpoint class. With hotswap, we will be able of swapping the wrapper code when needed.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4031050#4031050
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4031050
17 years, 6 months
[Design of AOP on JBoss (Aspects/JBoss)] - Optimizing genrated advisors
by kabir.khan@jboss.com
I've started a stress test framework, which lives under src/test/org/jboss/test/aop/stress. I'll be fleshing it out over the next few weeks and posting my findings here. To run the org.jboss.test.aop.stress.perinstancemethodinvocation test for example
| $ build.sh -f build-tests-jdk50.xml main loadtime-ga-test loadtime-test -Dtest=stress/perinstancemethodinvocation
|
The good news
=============
1) For method interception etc. using per_vm interceptors in generated advisors seem a bit faster than classic despite the extra method call in the weaving model.
2) For method interception etc. using per_vm aspects generated advisors seem about 10% faster than classic, probably because now the generated joinpoint classes call the advice method directly rather than relying on a generated class
3) Executing this 100000 times initially caused an OutOfMemoryError
| <interceptor name="Int1" class="org.jboss.test.aop.stress.perinstancemethodinvocation.PerInstanceInterceptor" scope="PER_INSTANCE"/>
|
| <bind pointcut="execution(* org.jboss.test.aop.stress.perinstancemethodinvocation.POJO->method1())">
| <interceptor-ref name="Int1"/>
| </bind>
|
|
| public void execute(int thread, int loop) throws Exception
| {
| POJO pojo = new POJO();
| pojo.method1();
| }
|
I have fixed the leak, so this problem does not occur anymore
The bad news
============
* Executing the per_instance example from above with generated advisors takes about 21 times as long as using classic. This is probably because for each new object, (Just working off memory here) if an object has per_instance aspects we then need to obtain a per_instance domain, populate the domain, redo all the bindings, and generate a unique joinpoint class for every single object. So I think we need to differentiate between cases where we actually have overridden something in the instance domain (i.e. dynamic aop) and where we are basically just inheriting everything from the parent.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4031020#4031020
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4031020
17 years, 6 months
[Other JBoss Development Design] - Re: failing org.jboss.test.util.test.ThreadPoolRunnableUnitT
by dimitris@jboss.org
After a painful investigation I traced that the failing test is caused by the replacement of
with
The 2 are supposed to only differ in that the 2nd is compiled with debug=on.
JBoss uses a thread pool, that lives in jboss common and is backed by a EDU.oswego.cs.dl.util.concurrent.PooledExecutor.
The test that fails involves a queued task and a thread pool of size 1, executing a spinning task. The spining tasks times out, is initially interrupted and then Thread.stopped().
In my understanding the original oswego jar makes the stopped pooled thread available to the queued task. In the debug version the pool thread seems to hung and so the remaining queued task is not executed, and the test fails.
I don't have the time to go deeper, so I'm just rolling back the update.
I would recommend that any brew replacements must - at a mininum - make sure they don't alter the testsuite status.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4031019#4031019
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4031019
17 years, 6 months