[
https://issues.apache.org/jira/browse/FLINK-37289?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Xinglong Wang updated FLINK-37289:
----------------------------------
Description:
h3. Problem Description
The SQL job encounters issues due to having too many fields in the DML
operations, such as a job which has over 2,000 fields. This results in the code
generation process creating an initialization block that needs to initialize
these fields and some auxiliary intermediate variables, totaling over 20,000
members. Consequently, the bytecode for the {{<init>}} method exceeds the JVM's
single method limit of 64KB, resulting in the following error:
{code:java}
Caused by: org.codehaus.janino.InternalCompilerException: Compiling
"StreamExecCalc$127849": Code of method
"<init>([Ljava/lang/Object;Lorg/apache/flink/streaming/runtime/tasks/StreamTask;Lorg/apache/flink/streaming/api/graph/StreamConfig;Lorg/apache/flink/streaming/api/operators/Output;Lorg/apache/flink/streaming/runtime/tasks/ProcessingTimeService;)V"
of class "StreamExecCalc$127849" grows beyond 64 KB
at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java:382)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:237)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java:465)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:216)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:207)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:80)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:75)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.doCompile(CompileUtils.java:104)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.lambda$compile$0(CompileUtils.java:92)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4864)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache.get(LocalCache.java:3962)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4859)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.compile(CompileUtils.java:92)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
... 32 more
Caused by: org.codehaus.janino.InternalCompilerException: Code of method
"<init>([Ljava/lang/Object;Lorg/apache/flink/streaming/runtime/tasks/StreamTask;Lorg/apache/flink/streaming/api/graph/StreamConfig;Lorg/apache/flink/streaming/api/operators/Output;Lorg/apache/flink/streaming/runtime/tasks/ProcessingTimeService;)V"
of class "StreamExecCalc$127849" grows beyond 64 KB
at org.codehaus.janino.CodeContext.makeSpace(CodeContext.java:1048)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.CodeContext.write(CodeContext.java:925)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.writeOpcode(UnitCompiler.java:12291)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.getfield(UnitCompiler.java:11974)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java:4470)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$7700(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$16$1.visitFieldAccess(UnitCompiler.java:4405)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$16$1.visitFieldAccess(UnitCompiler.java:4400)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$FieldAccess.accept(Java.java:4310)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4400)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4396)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Lvalue.accept(Java.java:4148)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java:4396)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java:4461)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$7500(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$16$1.visitAmbiguousName(UnitCompiler.java:4403)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$16$1.visitAmbiguousName(UnitCompiler.java:4400)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$AmbiguousName.accept(Java.java:4224)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4400)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4396)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Lvalue.accept(Java.java:4148)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java:4396)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java:5662)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileContext2(UnitCompiler.java:4351)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$6800(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$15$1.visitArrayAccessExpression(UnitCompiler.java:4272)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$15$1.visitArrayAccessExpression(UnitCompiler.java:4268)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$ArrayAccessExpression.accept(Java.java:4605)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$15.visitLvalue(UnitCompiler.java:4268)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$15.visitLvalue(UnitCompiler.java:4264)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Lvalue.accept(Java.java:4148)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileContext(UnitCompiler.java:4264)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:3789)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$6100(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$13.visitAssignment(UnitCompiler.java:3754)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$13.visitAssignment(UnitCompiler.java:3734)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Assignment.accept(Java.java:4477)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:3734)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:2360)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$1800(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$6.visitExpressionStatement(UnitCompiler.java:1494)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$6.visitExpressionStatement(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$ExpressionStatement.accept(Java.java:2874)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler.compileStatements(UnitCompiler.java:1567)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:1553)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$1700(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$6.visitBlock(UnitCompiler.java:1493)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$6.visitBlock(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Block.accept(Java.java:2779)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:1546)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$1400(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$6.visitInitializer(UnitCompiler.java:1490)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$6.visitInitializer(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Initializer.accept(Java.java:2048)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler.initializeInstanceVariablesAndInvokeInstanceInitializers(UnitCompiler.java:7580)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:3378)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:834)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:432)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$400(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$2.visitPackageMemberClassDeclaration(UnitCompiler.java:411)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$2.visitPackageMemberClassDeclaration(UnitCompiler.java:406)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.Java$PackageMemberClassDeclaration.accept(Java.java:1414)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:406)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java:378)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:237)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java:465)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:216)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:207)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:80)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:75)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.doCompile(CompileUtils.java:104)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.lambda$compile$0(CompileUtils.java:92)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4864)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache.get(LocalCache.java:3962)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4859)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.compile(CompileUtils.java:92)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
... 32 more {code}
h3. Explanation of the {{<init>}} Method
* {*}{{<init>}} Method{*}: In Java bytecode, each constructor is represented
as a special method named {{{}<init>{}}}.
* {*}Order of Instance Initialization{*}: The Java compiler weaves the
initialization logic into the {{<init>}} method in the following order:
** a. Calls the superclass constructor (calls the default no-argument
constructor if none is explicitly called).
** b. Initializes instance variables.
** c. Executes instance initialization blocks.
** d. Executes the actual code of the constructor.
* {*}Bytecode Generation{*}: The compiler inserts all this initialization
logic (instance variable initialization and instance initialization blocks)
into the beginning of the {{<init>}} method, after the call to the superclass
constructor but before the constructor's own code.
* {*}Impact on {{<init>}} Method Size{*}: Therefore, even if the constructor
itself has little code, having a large number of instance variable
initializations or complex instance initialization blocks will increase the
bytecode size of the {{<init>}} method.
h3. Fix
The initial logic in the initialization block, when translated into bytecode,
is executed via {{putfield}} instructions. The solution is to segment the
numerous {{putfield}} instructions into smaller blocks. For example, group
every 1,000 initialization statements into a private method, then call these
private methods within the initialization block. This transforms the
initialization block into a series of {{invokespecial}} instructions, which are
fewer in number.
For a detailed explanation, refer to the demonstration at
[https://godbolt.org/z/q9d1ncTrE].
was:
h3. Problem Description
The SQL job encounters issues due to having too many fields in the DML
operations, such as a job which has over 2,000 fields. This results in the code
generation process creating an initialization block that needs to initialize
these fields and some auxiliary intermediate variables, totaling over 20,000
members. Consequently, the bytecode for the {{<init>}} method exceeds the JVM's
single method limit of 64KB, resulting in the following error:
{code:java}
Caused by: org.codehaus.janino.InternalCompilerException: Compiling
"StreamExecCalc$127849": Code of method
"<init>([Ljava/lang/Object;Lorg/apache/flink/streaming/runtime/tasks/StreamTask;Lorg/apache/flink/streaming/api/graph/StreamConfig;Lorg/apache/flink/streaming/api/operators/Output;Lorg/apache/flink/streaming/runtime/tasks/ProcessingTimeService;)V"
of class "StreamExecCalc$127849" grows beyond 64 KB
at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java:382)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:237)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java:465)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:216)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:207)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:80)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:75)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.doCompile(CompileUtils.java:104)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.lambda$compile$0(CompileUtils.java:92)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4864)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache.get(LocalCache.java:3962)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4859)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.compile(CompileUtils.java:92)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
... 32 more
Caused by: org.codehaus.janino.InternalCompilerException: Code of method
"<init>([Ljava/lang/Object;Lorg/apache/flink/streaming/runtime/tasks/StreamTask;Lorg/apache/flink/streaming/api/graph/StreamConfig;Lorg/apache/flink/streaming/api/operators/Output;Lorg/apache/flink/streaming/runtime/tasks/ProcessingTimeService;)V"
of class "StreamExecCalc$127849" grows beyond 64 KB
at org.codehaus.janino.CodeContext.makeSpace(CodeContext.java:1048)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.CodeContext.write(CodeContext.java:925)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.writeOpcode(UnitCompiler.java:12291)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.getfield(UnitCompiler.java:11974)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java:4470)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$7700(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$16$1.visitFieldAccess(UnitCompiler.java:4405)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$16$1.visitFieldAccess(UnitCompiler.java:4400)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$FieldAccess.accept(Java.java:4310)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4400)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4396)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Lvalue.accept(Java.java:4148)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java:4396)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java:4461)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$7500(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$16$1.visitAmbiguousName(UnitCompiler.java:4403)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$16$1.visitAmbiguousName(UnitCompiler.java:4400)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$AmbiguousName.accept(Java.java:4224)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4400)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4396)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Lvalue.accept(Java.java:4148)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java:4396)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java:5662)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileContext2(UnitCompiler.java:4351)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$6800(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$15$1.visitArrayAccessExpression(UnitCompiler.java:4272)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$15$1.visitArrayAccessExpression(UnitCompiler.java:4268)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$ArrayAccessExpression.accept(Java.java:4605)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$15.visitLvalue(UnitCompiler.java:4268)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$15.visitLvalue(UnitCompiler.java:4264)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Lvalue.accept(Java.java:4148)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileContext(UnitCompiler.java:4264)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:3789)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$6100(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$13.visitAssignment(UnitCompiler.java:3754)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$13.visitAssignment(UnitCompiler.java:3734)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Assignment.accept(Java.java:4477)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:3734)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:2360)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$1800(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$6.visitExpressionStatement(UnitCompiler.java:1494)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$6.visitExpressionStatement(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$ExpressionStatement.accept(Java.java:2874)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler.compileStatements(UnitCompiler.java:1567)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:1553)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$1700(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$6.visitBlock(UnitCompiler.java:1493)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler$6.visitBlock(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Block.accept(Java.java:2779)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:1546)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$1400(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$6.visitInitializer(UnitCompiler.java:1490)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$6.visitInitializer(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.Java$Initializer.accept(Java.java:2048)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1487)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler.initializeInstanceVariablesAndInvokeInstanceInitializers(UnitCompiler.java:7580)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:3378)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:834)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:432)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.access$400(UnitCompiler.java:215)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$2.visitPackageMemberClassDeclaration(UnitCompiler.java:411)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.UnitCompiler$2.visitPackageMemberClassDeclaration(UnitCompiler.java:406)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.Java$PackageMemberClassDeclaration.accept(Java.java:1414)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:406)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java:378)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:237)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java:465)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:216)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:207)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:80)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:75)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.doCompile(CompileUtils.java:104)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.lambda$compile$0(CompileUtils.java:92)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4864)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache.get(LocalCache.java:3962)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4859)
~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
at
org.apache.flink.table.runtime.generated.CompileUtils.compile(CompileUtils.java:92)
~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
... 32 more {code}
{{}}
h3. Explanation of the {{<init>}} Method
* {*}{{<init>}} Method{*}: In Java bytecode, each constructor is represented
as a special method named {{{}<init>{}}}.
* {*}Order of Instance Initialization{*}: The Java compiler weaves the
initialization logic into the {{<init>}} method in the following order:
** a. Calls the superclass constructor (calls the default no-argument
constructor if none is explicitly called).
** b. Initializes instance variables.
** c. Executes instance initialization blocks.
** d. Executes the actual code of the constructor.
* {*}Bytecode Generation{*}: The compiler inserts all this initialization
logic (instance variable initialization and instance initialization blocks)
into the beginning of the {{<init>}} method, after the call to the superclass
constructor but before the constructor's own code.
* {*}Impact on {{<init>}} Method Size{*}: Therefore, even if the constructor
itself has little code, having a large number of instance variable
initializations or complex instance initialization blocks will increase the
bytecode size of the {{<init>}} method.
h3. Fix
The initial logic in the initialization block, when translated into bytecode,
is executed via {{putfield}} instructions. The solution is to segment the
numerous {{putfield}} instructions into smaller blocks. For example, group
every 1,000 initialization statements into a private method, then call these
private methods within the initialization block. This transforms the
initialization block into a series of {{invokespecial}} instructions, which are
fewer in number.
For a detailed explanation, refer to the demonstration at
[https://godbolt.org/z/q9d1ncTrE].
> Resolve JVM bytecode size limit exceeded in <init> method due to excessive
> field initializations in SQL job
> -----------------------------------------------------------------------------------------------------------
>
> Key: FLINK-37289
> URL: https://issues.apache.org/jira/browse/FLINK-37289
> Project: Flink
> Issue Type: Bug
> Affects Versions: 1.16.1
> Reporter: Xinglong Wang
> Priority: Major
>
> h3. Problem Description
> The SQL job encounters issues due to having too many fields in the DML
> operations, such as a job which has over 2,000 fields. This results in the
> code generation process creating an initialization block that needs to
> initialize these fields and some auxiliary intermediate variables, totaling
> over 20,000 members. Consequently, the bytecode for the {{<init>}} method
> exceeds the JVM's single method limit of 64KB, resulting in the following
> error:
> {code:java}
> Caused by: org.codehaus.janino.InternalCompilerException: Compiling
> "StreamExecCalc$127849": Code of method
> "<init>([Ljava/lang/Object;Lorg/apache/flink/streaming/runtime/tasks/StreamTask;Lorg/apache/flink/streaming/api/graph/StreamConfig;Lorg/apache/flink/streaming/api/operators/Output;Lorg/apache/flink/streaming/runtime/tasks/ProcessingTimeService;)V"
> of class "StreamExecCalc$127849" grows beyond 64 KB
> at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java:382)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:237)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java:465)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:216)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:207)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:80)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:75)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.table.runtime.generated.CompileUtils.doCompile(CompileUtils.java:104)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.table.runtime.generated.CompileUtils.lambda$compile$0(CompileUtils.java:92)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4864)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache.get(LocalCache.java:3962)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4859)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.table.runtime.generated.CompileUtils.compile(CompileUtils.java:92)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> ... 32 more
> Caused by: org.codehaus.janino.InternalCompilerException: Code of method
> "<init>([Ljava/lang/Object;Lorg/apache/flink/streaming/runtime/tasks/StreamTask;Lorg/apache/flink/streaming/api/graph/StreamConfig;Lorg/apache/flink/streaming/api/operators/Output;Lorg/apache/flink/streaming/runtime/tasks/ProcessingTimeService;)V"
> of class "StreamExecCalc$127849" grows beyond 64 KB
> at org.codehaus.janino.CodeContext.makeSpace(CodeContext.java:1048)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.CodeContext.write(CodeContext.java:925)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.writeOpcode(UnitCompiler.java:12291)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.getfield(UnitCompiler.java:11974)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java:4470)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.access$7700(UnitCompiler.java:215)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$16$1.visitFieldAccess(UnitCompiler.java:4405)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$16$1.visitFieldAccess(UnitCompiler.java:4400)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.Java$FieldAccess.accept(Java.java:4310)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4400)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4396)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.Java$Lvalue.accept(Java.java:4148)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java:4396)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java:4461)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.access$7500(UnitCompiler.java:215)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$16$1.visitAmbiguousName(UnitCompiler.java:4403)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$16$1.visitAmbiguousName(UnitCompiler.java:4400)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.Java$AmbiguousName.accept(Java.java:4224)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4400)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$16.visitLvalue(UnitCompiler.java:4396)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.Java$Lvalue.accept(Java.java:4148)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java:4396)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java:5662)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler.compileContext2(UnitCompiler.java:4351)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.access$6800(UnitCompiler.java:215)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$15$1.visitArrayAccessExpression(UnitCompiler.java:4272)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$15$1.visitArrayAccessExpression(UnitCompiler.java:4268)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.Java$ArrayAccessExpression.accept(Java.java:4605)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$15.visitLvalue(UnitCompiler.java:4268)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$15.visitLvalue(UnitCompiler.java:4264)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.Java$Lvalue.accept(Java.java:4148)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler.compileContext(UnitCompiler.java:4264)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:3789)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.access$6100(UnitCompiler.java:215)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$13.visitAssignment(UnitCompiler.java:3754)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$13.visitAssignment(UnitCompiler.java:3734)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.Java$Assignment.accept(Java.java:4477)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:3734)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:2360)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.access$1800(UnitCompiler.java:215)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$6.visitExpressionStatement(UnitCompiler.java:1494)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$6.visitExpressionStatement(UnitCompiler.java:1487)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.Java$ExpressionStatement.accept(Java.java:2874)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1487)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler.compileStatements(UnitCompiler.java:1567)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:1553)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.access$1700(UnitCompiler.java:215)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler$6.visitBlock(UnitCompiler.java:1493)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler$6.visitBlock(UnitCompiler.java:1487)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.Java$Block.accept(Java.java:2779)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1487)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:1546)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.access$1400(UnitCompiler.java:215)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$6.visitInitializer(UnitCompiler.java:1490)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$6.visitInitializer(UnitCompiler.java:1487)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.Java$Initializer.accept(Java.java:2048)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1487)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler.initializeInstanceVariablesAndInvokeInstanceInitializers(UnitCompiler.java:7580)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:3378)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:834)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:432)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.access$400(UnitCompiler.java:215)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$2.visitPackageMemberClassDeclaration(UnitCompiler.java:411)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.UnitCompiler$2.visitPackageMemberClassDeclaration(UnitCompiler.java:406)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.Java$PackageMemberClassDeclaration.accept(Java.java:1414)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:406)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java:378)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:237)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java:465)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:216)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:207)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:80)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:75)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.table.runtime.generated.CompileUtils.doCompile(CompileUtils.java:104)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.table.runtime.generated.CompileUtils.lambda$compile$0(CompileUtils.java:92)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4864)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache.get(LocalCache.java:3962)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.shaded.guava30.com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4859)
> ~[flink-dist-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> at
> org.apache.flink.table.runtime.generated.CompileUtils.compile(CompileUtils.java:92)
> ~[flink-table-runtime-1.16.1-mt001-SNAPSHOT.jar:1.16.1-mt001-SNAPSHOT]
> ... 32 more {code}
>
> h3. Explanation of the {{<init>}} Method
> * {*}{{<init>}} Method{*}: In Java bytecode, each constructor is represented
> as a special method named {{{}<init>{}}}.
> * {*}Order of Instance Initialization{*}: The Java compiler weaves the
> initialization logic into the {{<init>}} method in the following order:
> ** a. Calls the superclass constructor (calls the default no-argument
> constructor if none is explicitly called).
> ** b. Initializes instance variables.
> ** c. Executes instance initialization blocks.
> ** d. Executes the actual code of the constructor.
> * {*}Bytecode Generation{*}: The compiler inserts all this initialization
> logic (instance variable initialization and instance initialization blocks)
> into the beginning of the {{<init>}} method, after the call to the superclass
> constructor but before the constructor's own code.
> * {*}Impact on {{<init>}} Method Size{*}: Therefore, even if the constructor
> itself has little code, having a large number of instance variable
> initializations or complex instance initialization blocks will increase the
> bytecode size of the {{<init>}} method.
> h3. Fix
> The initial logic in the initialization block, when translated into bytecode,
> is executed via {{putfield}} instructions. The solution is to segment the
> numerous {{putfield}} instructions into smaller blocks. For example, group
> every 1,000 initialization statements into a private method, then call these
> private methods within the initialization block. This transforms the
> initialization block into a series of {{invokespecial}} instructions, which
> are fewer in number.
> For a detailed explanation, refer to the demonstration at
> [https://godbolt.org/z/q9d1ncTrE].
--
This message was sent by Atlassian Jira
(v8.20.10#820010)