On Thu, 22 Apr 2021 15:08:59 GMT, Jaroslav Bachorik <jbacho...@openjdk.org> 
wrote:

>> I wonder if something similar to below could be added to 
>> jdk.jfr.internal.Utils:
>> 
>>     private static Metrics[] metrics;
>>     public static Metrics getMetrics() {
>>         if (metrics == null) {
>>             metrics = new Metrics[] { Metrics.systemMetrics() };
>>         }
>>         return metrics[0];
>>     }
>> 
>>     public static boolean shouldSkipBytecode(String eventName, Class<?> 
>> superClass) {
>>         if (superClass != AbstractJDKEvent.class) {
>>             return false;
>>         }
>>         if (!eventName.startsWith("jdk.Container")) {
>>             return false;
>>         }
>>         return getMetrics() == null;
>>     }
>> 
>> Then we could add checks to 
>> jdk.jfr.internal.JVMUpcalls::bytesForEagerInstrumentation(...)
>> 
>>     eventName = ei.getEventName();
>>     if (Utils.shouldSkipBytecode(eventName, superClass))) {
>>         return oldBytes;
>>     }
>> 
>> and jdk.jfr.internal.JVMUpcalls:onRetransform(...)
>> 
>>     if (jdk.internal.event.Event.class.isAssignableFrom(clazz) && 
>> !Modifier.isAbstract(clazz.getModifiers())) {
>>         if (Utils.shouldSkipBytecode(clazz.getName(), 
>> clazz.getSuperclass())) {
>>             return oldBytes;
>>         }
>> 
>> This way we would not pay for generating bytecode for events in a 
>> non-container environment. 
>> 
>> Not sure if it works, but could perhaps make startup faster? We would still 
>> pay for generating the event handlers during registration, but it's much 
>> trickier to avoid since we need to store the event type somewhere.
>
> @egahlin Sounds good.
> Any particular reason you are using `Metrics[]` array?

@jbachorik Has this been tested on cgroups v1 and cgroups v2 Linux systems?

-------------

PR: https://git.openjdk.java.net/jdk/pull/3126

Reply via email to