Zhanghao Chen created FLINK-37735:
-------------------------------------
Summary: 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
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)