Error java.lang.OutOfMemoryError: GC overhead limit exceeded

后端 未结 20 2339
攒了一身酷
攒了一身酷 2020-11-21 05:23

I get this error message as I execute my JUnit tests:

java.lang.OutOfMemoryError: GC overhead limit exceeded

I know what an OutOfMemo

相关标签:
20条回答
  • 2020-11-21 05:34

    Java heap size descriptions (xms, xmx, xmn)

    -Xms size in bytes
    
    Example : java -Xms32m
    

    Sets the initial size of the Java heap. The default size is 2097152 (2MB). The values must be a multiple of, and greater than, 1024 bytes (1KB). (The -server flag increases the default size to 32M.)

    -Xmn size in bytes
    
    Example : java -Xmx2m
    

    Sets the initial Java heap size for the Eden generation. The default value is 640K. (The -server flag increases the default size to 2M.)

    -Xmx size in bytes
    
    Example : java -Xmx2048m
    

    Sets the maximum size to which the Java heap can grow. The default size is 64M. (The -server flag increases the default size to 128M.) The maximum heap limit is about 2 GB (2048MB).

    Java memory arguments (xms, xmx, xmn) formatting

    When setting the Java heap size, you should specify your memory argument using one of the letters “m” or “M” for MB, or “g” or “G” for GB. Your setting won’t work if you specify “MB” or “GB.” Valid arguments look like this:

    -Xms64m or -Xms64M -Xmx1g or -Xmx1G Can also use 2048MB to specify 2GB Also, make sure you just use whole numbers when specifying your arguments. Using -Xmx512m is a valid option, but -Xmx0.5g will cause an error.

    This reference can be helpful for someone.

    0 讨论(0)
  • 2020-11-21 05:34

    In Netbeans, it may be helpful to design a max heap size. Go to Run => Set Project Configuration => Customise. In the Run of its popped up window, go to VM Option, fill in -Xms2048m -Xmx2048m. It could solve heap size problem.

    0 讨论(0)
  • 2020-11-21 05:35

    You can also increase memory allocation and heap size by adding this to your gradle.properties file:

    org.gradle.jvmargs=-Xmx2048M -XX\:MaxHeapSize\=32g

    It doesn't have to be 2048M and 32g, make it as big as you want.

    0 讨论(0)
  • 2020-11-21 05:35

    you can try to make changes on the server setting by referring to this image and increase the memory size for processing process changes highlighted in yellow

    you can also make changes to java heap by opening cmd-> set _java_opts -Xmx2g
    2g(2gigabytes) depending upon the complexity of your program

    try to use less constant variable and temp variables

    0 讨论(0)
  • 2020-11-21 05:38

    This message means that for some reason the garbage collector is taking an excessive amount of time (by default 98% of all CPU time of the process) and recovers very little memory in each run (by default 2% of the heap).

    This effectively means that your program stops doing any progress and is busy running only the garbage collection at all time.

    To prevent your application from soaking up CPU time without getting anything done, the JVM throws this Error so that you have a chance of diagnosing the problem.

    The rare cases where I've seen this happen is where some code was creating tons of temporary objects and tons of weakly-referenced objects in an already very memory-constrained environment.

    Check out the Java GC tuning guide, which is available for various Java versions and contains sections about this specific problem:

    • Java 11 tuning guide has dedicated sections on excessive GC for different garbage collectors:
      • for the Parallel Collector
      • for the Concurrent Mark Sweep (CMS) Collector
      • there is no mention of this specific error condition for the Garbage First (G1) collector.
    • Java 8 tuning guide and its Excessive GC section
    • Java 6 tuning guide and its Excessive GC section.
    0 讨论(0)
  • 2020-11-21 05:38

    Just increase the heap size a little by setting this option in

    Run → Run Configurations → Arguments → VM arguments

    -Xms1024M -Xmx2048M
    

    Xms - for minimum limit

    Xmx - for maximum limit

    0 讨论(0)
提交回复
热议问题