jruby OutOfMemoryError非常小的例子

时间:2015-11-20 10:32:12

标签: garbage-collection out-of-memory jruby

我有一个关于灌木垃圾收集的问题。 OutOfMemoryError引导我进入以下最小示例。我用JAVA_MEM=-Xmx500m ruby -w -J-verbose:gc运行它来将内存限制为500 MB并显示gc输出。

(1..5_000_000).to_a
(1..5_000_000).to_a

这很好用。但是,运行这个:

(1..5_000_000).to_a
(1..5_000_000).to_a
(1..5_000_000).to_a

我得到一个OutOfMemoryError(请参阅下面的完整OutOfMemoryError堆栈跟踪)。这让我很困惑,因为垃圾收集器应该能够释放第一个对象使用的内存。

堆栈跟踪输出:

java.lang.OutOfMemoryError: Java heap space
    at org.jruby.RubyFixnum.newFixnum(RubyFixnum.java:211)
    at org.jruby.RubyRange.to_a(RubyRange.java:406)
    at org.jruby.RubyRange$INVOKER$i$0$0$to_a.call(RubyRange$INVOKER$i$0$0$to_a.gen)
    at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrNBlock.call(JavaMethod.java:306)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:293)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:131)
    at app.performance.invokeOther4:to_a(app/performance.rb)
    at app.performance.RUBY$script(app/performance.rb:3)
    at java.lang.invoke.LambdaForm$DMH/1172823033.invokeStatic_LLLLLLL_L(LambdaForm$DMH)
    at java.lang.invoke.LambdaForm$DMH/1009311031.invokeSpecial_LLLLLLLL_L(LambdaForm$DMH)
    at java.lang.invoke.LambdaForm$NFI/1072591159.invoke_LLLLLLLL_L(LambdaForm$NFI)
    at java.lang.invoke.LambdaForm$DMH/871997608.invokeStatic_LL_L(LambdaForm$DMH)
    at java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:1136)
    at java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:625)
    at java.lang.invoke.LambdaForm.interpretWithArguments(LambdaForm.java:604)
    at java.lang.invoke.LambdaForm$LFI/515921628.interpret_L(LambdaForm$LFI)
    at java.lang.invoke.LambdaForm$NFI/1072591159.invoke_LLLLLLLL_L(LambdaForm$NFI)
    at java.lang.invoke.LambdaForm$DMH/871997608.invokeStatic_LL_L(LambdaForm$DMH)
    at java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:1136)
    at java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:625)
    at java.lang.invoke.LambdaForm.interpretWithArguments(LambdaForm.java:604)
    at java.lang.invoke.LambdaForm$LFI/1903586078.interpret_L(LambdaForm$LFI)
    at java.lang.invoke.LambdaForm$NFI/939187759.invoke_LLLLLLLLL_L(LambdaForm$NFI)
    at java.lang.invoke.LambdaForm$DMH/871997608.invokeStatic_LL_L(LambdaForm$DMH)
    at java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:1136)
    at java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:625)
    at java.lang.invoke.LambdaForm.interpretWithArguments(LambdaForm.java:604)
    at java.lang.invoke.LambdaForm$LFI/1903586078.interpret_L(LambdaForm$LFI)
    at java.lang.invoke.LambdaForm$NFI/939187759.invoke_LLLLLLLLL_L(LambdaForm$NFI)
    at java.lang.invoke.LambdaForm$DMH/871997608.invokeStatic_LL_L(LambdaForm$DMH)
    at java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:1136)
    at java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:625)

jruby版本:

jruby 9.0.1.0 (2.2.2) 2015-09-02 583f336 OpenJDK 64-Bit Server VM 24.79-b02 on 1.7.0_79-b14 +jit [linux-amd64]

0 个答案:

没有答案