[
https://issues.apache.org/jira/browse/FLINK-37735?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17947578#comment-17947578
]
Zhanghao Chen commented on FLINK-37735:
---------------------------------------
Side note: we also tested with {{{}LambdaMetaFactory{}}}, which is much faster
according to
[https://www.optaplanner.org/blog/2018/01/09/JavaReflectionButMuchFaster.html]
. Indeed it is on mircobenchmarks, but on production env, the difference is
almost negligible even on our most high-volumn (15Mils record/s) and Pojo-seder
heavy jobs. On the other hand, {{LambdaMetaFactory}} is quite verbose and more
difficult to understand for non-JVM experts, so we think it better to use
{{constructor.newInstance}} here and wait for higher versions of JDK to improve
its performance transparently later rather trying to optimize it with
{{LambdaMetaFactory}} on our own.
> Replace class.newInstance with constructor.newInstance
> ------------------------------------------------------
>
> Key: FLINK-37735
> URL: https://issues.apache.org/jira/browse/FLINK-37735
> Project: Flink
> Issue Type: Sub-task
> Components: API / Type Serialization System
> Reporter: Zhanghao Chen
> Priority: Major
> Attachments: image-2025-04-27-13-05-28-554.png,
> image-2025-04-27-13-14-18-941.png
>
>
> *Problem*
> Flink's PojoSerializer and TupleSerializer uses {{class.newInstance}} to
> instiantiate a new instance. The {{class.newInstance}} call will get caller
> class and do access check on each invocation, which consumes much CPU, as
> depicted in the flame graph below. It is also marked @Deprecated since JDK9,
> and is subject to removal in later JDK versions.
> !image-2025-04-27-13-05-28-554.png|width=730,height=137!
> *Proposal*
> The suggested alternative is to use {{{}constructor.newInstance{}}}, which
> allows bypassing the access check completely after setting accessible to
> true. It also throws more specific exception on invocation error.
> The performance gets boosted by ~5% on the Flink POJO benchmark (tested on my
> laptop with JDK17.0.14):
> !image-2025-04-27-13-14-18-941.png!
--
This message was sent by Atlassian Jira
(v8.20.10#820010)