|
|
|
ClassFileTransformer.transform(...) - конкурентный вызов для одного и того же класса&загр.
|
|||
|---|---|---|---|
|
#18+
В J2SE 5.0 в спецификации к методу ClassFileTransformer.transform(final ClassLoader classLoader, final String className, final Class<?> classBeingRedefined, final ProtectionDomain protectionDomain, final byte[] classfileBuffer) сказано: авторtransformer will be called for every new class definition and every class redefinition. The request for a new class definition is made with ClassLoader.defineClass. The request for a class redefinition is made with Instrumentation.redefineClasses or its native equivalents. The transformer is called during the processing of the request, before the class file bytes have been verified or applied. Из этой информации непонятно может ли метод быть вызван конкурентно для одного и того же рантайм-класса (className&classLoader)? Ясно что можно конкурентно вызывать Instrumentation.redefineClasses для одного и того же класса, но это не зачит, что в результате ClassFileTransformer.transform тоже может быть вызван конкурентно для той же пары. Поясню ещё откуда вопрос родился. Для трансформации используется Javassist: из инстанса ClassPool достаётся нужный объект CtClass, с ним делаются манипуляции, получается массив байт (СtClass.toBytecode()) который возвращается из ClassFileTransformer.transform Инстанс ClassPool используется один и тот же, соответственно если конкуррентно будет вызван ClassFileTransformer.transform, то получится конкуррентная трансформирующая работа с объектом CtClass, что к хорошему не приведёт. Из-за этого получив инстанс CtClass, всю работу с ним делаю с synchronized блоке. Но если выяснится что на самом деле ClassFileTransformer.transform ну никак не может быть вызван конкуррентно для одного и того же класса, то можно было бы выбросить лишнюю синхронизацию при работе с CtClass (сейчас она сделана на всякий случай, т.к. непонятно нужна, или нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2012, 15:06:41 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2130829]: |
0ms |
get settings: |
16ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
55ms |
get topic data: |
19ms |
get first new msg: |
13ms |
get forum data: |
6ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 303ms |
| total: | 504ms |

| 0 / 0 |
