You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have a replay that is eight hours long. I tried to fast forward halfway, and my client ran out of the 8GB of heap memory I have allocated. I'll be analyzing the heap dump and making another issue once I identify the problem with that.
Anyway, I relaunched Minecraft and tried splitting the replay into sections. Soon after, it ran out of heap memory again.
Problem:
// Don't be sad, have a hug! <3
Time: 2024-05-11 00:09:15
Description: Running marker processor
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3481) ~[?:?] {re:mixin}
at java.util.ArrayList.grow(ArrayList.java:237) ~[?:?] {re:mixin}
at java.util.ArrayList.grow(ArrayList.java:244) ~[?:?] {re:mixin}
at java.util.ArrayList.add(ArrayList.java:486) ~[?:?] {re:mixin}
at java.util.ArrayList$ListItr.add(ArrayList.java:1068) ~[?:?] {}
at com.replaymod.replaystudio.stream.IteratorStream.insert(IteratorStream.java:54) ~[replaymod-1.20.1-2.6.15_mapped_srg_1.20.1.jar%231153!/:?] {re:classloading}
at com.replaymod.replaystudio.filter.SquashFilter.add(SquashFilter.java:819) ~[replaymod-1.20.1-2.6.15_mapped_srg_1.20.1.jar%231153!/:?] {re:classloading}
at com.replaymod.replaystudio.filter.SquashFilter.onEnd(SquashFilter.java:773) ~[replaymod-1.20.1-2.6.15_mapped_srg_1.20.1.jar%231153!/:?] {re:classloading}
at com.replaymod.editor.gui.MarkerProcessor.apply(MarkerProcessor.java:168) ~[replaymod-1.20.1-2.6.15_mapped_srg_1.20.1.jar%231153!/:?] {re:classloading}
at com.replaymod.editor.gui.GuiEditReplay.lambda$apply$12(GuiEditReplay.java:164) ~[replaymod-1.20.1-2.6.15_mapped_srg_1.20.1.jar%231153!/:?] {re:classloading}
at com.replaymod.editor.gui.GuiEditReplay$$Lambda$52301/0x00000008063c9278.run(Unknown Source) ~[?:?] {}
at java.lang.Thread.run(Thread.java:833) ~[?:?] {re:mixin}
Essentially, it seems that the entire replay gets buffered into a list before being committed to the file. This is fine for smaller replays, but for larger ones it ends up overflowing the allocated heap memory.
Solution:
Directly append each packet onto the file without buffering them first.
I can make the PR for this, but could you please help me understand what this section of code is doing so I don't break anything when fixing it?
The text was updated successfully, but these errors were encountered:
ByThePowerOfScience
changed the title
Heap overflow when working with large files
Heap overflow when splitting large files
May 11, 2024
Context:
I have a replay that is eight hours long. I tried to fast forward halfway, and my client ran out of the 8GB of heap memory I have allocated. I'll be analyzing the heap dump and making another issue once I identify the problem with that.
Anyway, I relaunched Minecraft and tried splitting the replay into sections. Soon after, it ran out of heap memory again.
Problem:
ReplayMod/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java
Lines 162 to 175 in 706d46f
Essentially, it seems that the entire replay gets buffered into a list before being committed to the file. This is fine for smaller replays, but for larger ones it ends up overflowing the allocated heap memory.
Solution:
Directly append each packet onto the file without buffering them first.
I can make the PR for this, but could you please help me understand what this section of code is doing so I don't break anything when fixing it?
The text was updated successfully, but these errors were encountered: