JDK-8058892 : FILL_ARRAYS and ARRAYS are eagely initialized in MethodHandleImpl
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.lang.invoke
  • Affected Version: 8u40,9
  • Priority: P1
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2014-09-22
  • Updated: 2017-08-24
  • Resolved: 2014-10-03
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8 JDK 9
8u40Fixed 9 b36Fixed
Related Reports
Relates :  
Description
5 instances of failures of these 2 tests on Win/x64 and Solaris (sparc and x64)

Here's a typical log:

#section:main
----------messages:(3/367)----------
command: main -XX:-TieredCompilation -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:TypeProfileLevel=222 -XX:ReservedCodeCacheSize=3M Agent
reason: User specified action: run main/othervm -XX:-TieredCompilation -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:TypeProfileLevel=222 -XX:ReservedCodeCacheSize=3M Agent 
elapsed time (seconds): 15.04
----------System.out:(87/7139)----------
CodeCache: size=3072Kb used=2546Kb max_used=2549Kb free=525Kb
 bounds [0xffffffff7cc00000, 0xffffffff7cf00000, 0xffffffff7cf00000]
 total_blobs=1123 nmethods=674 adapters=408
 compilation: disabled (not enough contiguous free space left)
Error occurred during initialization of VM
java.lang.InternalError: java.lang.NoSuchMethodException: no such method: java.lang.invoke.MethodHandle.linkToSpecial(Object,Object,Object,Object,Object,Object,Object,Object,MemberName)Object/invokeStatic
	at java.lang.invoke.MethodHandleStatics.newInternalError(MethodHandleStatics.java:120)
	at java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:214)
	at java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:188)
	at java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:177)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:84)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:104)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:109)
	at java.lang.invoke.Invokers.basicInvoker(Invokers.java:85)
	at java.lang.invoke.LambdaForm$NamedFunction.<init>(LambdaForm.java:1000)
	at java.lang.invoke.LambdaForm$Name.<init>(LambdaForm.java:1358)
	at java.lang.invoke.DelegatingMethodHandle.makeReinvokerForm(DelegatingMethodHandle.java:121)
	at java.lang.invoke.DelegatingMethodHandle.chooseDelegatingForm(DelegatingMethodHandle.java:88)
	at java.lang.invoke.DelegatingMethodHandle.<init>(DelegatingMethodHandle.java:44)
	at java.lang.invoke.MethodHandleImpl$IntrinsicMethodHandle.<init>(MethodHandleImpl.java:1167)
	at java.lang.invoke.MethodHandleImpl.makeIntrinsic(MethodHandleImpl.java:1209)
	at java.lang.invoke.MethodHandleImpl.makeArrays(MethodHandleImpl.java:1265)
	at java.lang.invoke.MethodHandleImpl.<clinit>(MethodHandleImpl.java:1271)
	at java.lang.invoke.MethodHandle.<clinit>(MethodHandle.java:422)
Caused by: java.lang.NoSuchMethodException: no such method: java.lang.invoke.MethodHandle.linkToSpecial(Object,Object,Object,Object,Object,Object,Object,Object,MemberName)Object/invokeStatic
	at java.lang.invoke.MemberName.makeAccessException(MemberName.java:873)
	at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:990)
	at java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:212)
	at java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:188)
	at java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:177)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:84)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:104)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:109)
	at java.lang.invoke.Invokers.basicInvoker(Invokers.java:85)
	at java.lang.invoke.LambdaForm$NamedFunction.<init>(LambdaForm.java:1000)
	at java.lang.invoke.LambdaForm$Name.<init>(LambdaForm.java:1358)
	at java.lang.invoke.DelegatingMethodHandle.makeReinvokerForm(DelegatingMethodHandle.java:121)
	at java.lang.invoke.DelegatingMethodHandle.chooseDelegatingForm(DelegatingMethodHandle.java:88)
	at java.lang.invoke.DelegatingMethodHandle.<init>(DelegatingMethodHandle.java:44)
	at java.lang.invoke.MethodHandleImpl$IntrinsicMethodHandle.<init>(MethodHandleImpl.java:1167)
	at java.lang.invoke.MethodHandleImpl.makeIntrinsic(MethodHandleImpl.java:1209)
	at java.lang.invoke.MethodHandleImpl.makeArrays(MethodHandleImpl.java:1265)
	at java.lang.invoke.MethodHandleImpl.<clinit>(MethodHandleImpl.java:1271)
	at java.lang.invoke.MethodHandle.<clinit>(MethodHandle.java:422)
Caused by: java.lang.NoSuchMethodError: java.lang.invoke.MethodHandle.linkToSpecial(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/invoke/MemberName;)Ljava/lang/Object;
	at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
	at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:962)
	at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:987)
	at java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:212)
	at java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:188)
	at java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:177)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:84)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:104)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:109)
	at java.lang.invoke.Invokers.basicInvoker(Invokers.java:85)
	at java.lang.invoke.LambdaForm$NamedFunction.<init>(LambdaForm.java:1000)
	at java.lang.invoke.LambdaForm$Name.<init>(LambdaForm.java:1358)
	at java.lang.invoke.DelegatingMethodHandle.makeReinvokerForm(DelegatingMethodHandle.java:121)
	at java.lang.invoke.DelegatingMethodHandle.chooseDelegatingForm(DelegatingMethodHandle.java:88)
	at java.lang.invoke.DelegatingMethodHandle.<init>(DelegatingMethodHandle.java:44)
	at java.lang.invoke.MethodHandleImpl$IntrinsicMethodHandle.<init>(MethodHandleImpl.java:1167)
	at java.lang.invoke.MethodHandleImpl.makeIntrinsic(MethodHandleImpl.java:1209)
	at java.lang.invoke.MethodHandleImpl.makeArrays(MethodHandleImpl.java:1265)
	at java.lang.invoke.MethodHandleImpl.<clinit>(MethodHandleImpl.java:1271)
	at java.lang.invoke.MethodHandle.<clinit>(MethodHandle.java:422)
Caused by: java.lang.VirtualMachineError: out of space in CodeCache for method handle intrinsic
	at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
	at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:962)
	at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:987)
	at java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:212)
	at java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:188)
	at java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:177)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:84)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:104)
	at java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:109)
	at java.lang.invoke.Invokers.basicInvoker(Invokers.java:85)
	at java.lang.invoke.LambdaForm$NamedFunction.<init>(LambdaForm.java:1000)
	at java.lang.invoke.LambdaForm$Name.<init>(LambdaForm.java:1358)
	at java.lang.invoke.DelegatingMethodHandle.makeReinvokerForm(DelegatingMethodHandle.java:121)
	at java.lang.invoke.DelegatingMethodHandle.chooseDelegatingForm(DelegatingMethodHandle.java:88)
	at java.lang.invoke.DelegatingMethodHandle.<init>(DelegatingMethodHandle.java:44)
	at java.lang.invoke.MethodHandleImpl$IntrinsicMethodHandle.<init>(MethodHandleImpl.java:1167)
	at java.lang.invoke.MethodHandleImpl.makeIntrinsic(MethodHandleImpl.java:1209)
	at java.lang.invoke.MethodHandleImpl.makeArrays(MethodHandleImpl.java:1265)
	at java.lang.invoke.MethodHandleImpl.<clinit>(MethodHandleImpl.java:1271)
	at java.lang.invoke.MethodHandle.<clinit>(MethodHandle.java:422)

----------System.err:(2/201)----------
Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled.
Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize=

Comments
LF caching changes hit 9b31 and there's some unnecessary work being done for bootstrapping then. Suggested fix (attached 8058892.lazy_init.patch) is to delay initialization of MethodHandleImpl.FILL_ARRAYS & MethodHandleImpl.ARRAYS.
02-10-2014

May be related to lambda form caching. Assigning to the expert.
02-10-2014

The reason is that we need to compile 3X more methods starting with b31. See the output of PrintCompilation in the attached files. Note that this results in a regression of JVM startup time of 30% and more.
02-10-2014

Is this related to JDK-8058536?
02-10-2014

We can fix it by adding -Xmixed flag to the test command if it is Xcomp causing codecache fill up. It will overwrite -Xcomp passed by testing infrastructure.
02-10-2014

Looks like it was run with -Xcomp. But it is "Error occurred during initialization of VM" - we did not even start the application.
02-10-2014

I want to see (codecache dump) how this 3M are used now and before it stared failing. We need to make sure that all code in codecache is legit before increasing tested size. It could be fragmentation or other things which could be fixed.
02-10-2014

Removing -XX:ReservedCodeCacheSize=3m solves the problem. Trying to find if this option is required to reproduce original issues in all affected tests. Test compiler/startup/SmallCodeCacheStartup.java is a regression test of crash (JDK-8023014), that happened on small amount of code cache. Removing this option may change the test completely
26-09-2014

ILW=Test failed due to constrained code cache, 50 times, use larger codecache + nightly = HMH = P1 Suggested fix: Investigate if removing "XX:ReservedCodeCacheSize" solves the problem.
23-09-2014