เกิดข้อผิดพลาด java.lang.OutOfMemoryError: เกินขีด จำกัด ค่าโสหุ้ย GC


804

ฉันได้รับข้อความแสดงข้อผิดพลาดขณะที่ฉันทำการทดสอบ JUnit:

java.lang.OutOfMemoryError: GC overhead limit exceeded

ฉันรู้ว่าอะไรOutOfMemoryErrorคือ แต่ขีด จำกัด ค่าใช้จ่ายของ GC หมายถึงอะไร ฉันจะแก้ปัญหานี้ได้อย่างไร


16
ฟังดูน่าสนใจมาก ฉันชอบถ้ามีคนสามารถโพสต์รหัสที่สร้างนี้
Buhb

1
ฉันเพิ่งพบปัญหาที่นำไปสู่การใช้หน่วยความจำมากเกินไปใกล้ถึงขีด จำกัด ของฮีป วิธีแก้ปัญหาง่ายๆอาจเป็นเพียงการมอบฮีปหน่วยความจำเพิ่มเติมให้กับ Java-Engine (-Xmx) แต่วิธีนี้จะช่วยได้ก็ต่อเมื่อแอปพลิเคชันต้องการหน่วยความจำเท่ากันมากเท่ากับฮีปที่ จำกัด ก่อนหน้านี้
Mnementh

1
@Mnementh ฉันได้ให้คำตอบที่นี่ตรวจสอบว่ามันจะช่วยให้ stackoverflow.com/questions/11091516/...
lulu

16
@SimonKuang โปรดทราบว่ามีหลายOutOfMemoryErrorสถานการณ์ที่การเพิ่มฮีปไม่ใช่วิธีแก้ปัญหาที่ถูกต้อง: การรันเธรดดั้งเดิมและการหมดเรคคอร์ด Gen (ซึ่งแยกจากฮีป) เป็นสองตัวอย่าง ระมัดระวังเกี่ยวกับการทำงบกว้างเกินไปเกี่ยวกับOutOfMemoryErrors; มีชุดของสิ่งต่าง ๆ ที่ไม่คาดคิดที่สามารถทำให้พวกเขา
ทิม

3
คุณแก้ปัญหาอย่างไร?
Thorsten Niehues

คำตอบ:


763

ข้อความนี้หมายความว่าด้วยเหตุผลบางอย่างที่ตัวรวบรวมขยะใช้เวลามากเกินไป (โดยค่าเริ่มต้น 98% ของเวลา CPU ทั้งหมดของกระบวนการ) และกู้คืนหน่วยความจำน้อยมากในการทำงานแต่ละครั้ง (โดยค่าเริ่มต้น 2% ของฮีป)

ซึ่งหมายความว่าโปรแกรมของคุณหยุดดำเนินการใด ๆ อย่างมีประสิทธิภาพและไม่ว่างในการรันเฉพาะการรวบรวมขยะตลอดเวลา

เพื่อป้องกันไม่ให้แอปพลิเคชันของคุณดื่มด่ำกับเวลา CPU โดยไม่ทำอะไรเลย JVM จะพ่นสิ่งนี้ทิ้งErrorเพื่อให้คุณมีโอกาสวินิจฉัยปัญหาได้

กรณีที่ไม่ค่อยเกิดขึ้นซึ่งฉันได้เห็นสิ่งนี้เกิดขึ้นคือที่บางโค้ดสร้างวัตถุชั่วคราวจำนวนมากและวัตถุที่อ้างอิงน้อยมากในสภาพแวดล้อมที่ จำกัด หน่วยความจำมาก

ลองดูคู่มือการปรับจูน Java GC ซึ่งมีให้สำหรับ Java เวอร์ชันต่างๆและมีส่วนเกี่ยวกับปัญหาเฉพาะนี้:


9
มันจะถูกต้องหรือไม่ที่จะสรุปคำตอบของคุณดังนี้: "มันเหมือนกับข้อผิดพลาด 'Out of Java Heap space' ให้หน่วยความจำมากขึ้นด้วย -Xmx" ?
ทิมคูเปอร์

58
@Tim: ไม่ว่าจะไม่ถูกต้อง ในขณะที่ให้หน่วยความจำเพิ่มเติมสามารถลดปัญหาคุณควรดูรหัสของคุณและดูว่าทำไมมันสร้างจำนวนขยะและทำไมรหัสของคุณ skims เพียงด้านล่างเครื่องหมาย "ออกจากหน่วยความจำ" มันมักจะเป็นสัญญาณของรหัสที่ใช้ไม่ได้
โจอาคิมซาวเออร์

8
ขอบคุณดูเหมือนว่า Oracle นั้นไม่ค่อยดีในการโยกย้ายข้อมูล แต่มันก็เชื่อมโยงไม่ได้
Joachim Sauer

151
คุณมีฉันที่ "ขอบคุณดูเหมือนว่า Oracle ไม่ดีจริง ๆ "
Rob Grant

3
@Guus: หากแอปพลิเคชั่นหลายตัวทำงานใน JVM เดียวกันจากนั้นใช่พวกเขาสามารถมีอิทธิพลต่อกันและกันได้อย่างง่ายดาย มันยากที่จะบอกว่าอันไหนที่ทำงานผิดได้ การแยกแอ็พพลิเคชันออกเป็น JVM ที่แตกต่างกันอาจเป็นวิธีที่ง่ายที่สุด
Joachim Sauer

215

การอ้างอิงจากบทความของ Oracle "การปรับจูนคอลเลกชันเสมือนของเครื่องจักรเสมือน Java SE 6 HotSpot [tm]" :

เวลา GC มากเกินไปและ OutOfMemoryError

ตัวรวบรวมแบบขนานจะโยน OutOfMemoryError หากใช้เวลามากเกินไปในการรวบรวมขยะ: หากใช้เวลามากกว่า 98% ของเวลาทั้งหมดในการรวบรวมขยะและกู้คืนฮีปน้อยกว่า 2% ระบบ OutOfMemoryError จะถูกโยนทิ้ง คุณสมบัตินี้ได้รับการออกแบบมาเพื่อป้องกันไม่ให้แอปพลิเคชันทำงานเป็นระยะเวลานานขณะที่ความคืบหน้าเพียงเล็กน้อยหรือไม่มีเลยเพราะฮีปมีขนาดเล็กเกินไป หากจำเป็นคุณสมบัตินี้สามารถปิดใช้งานได้โดยการเพิ่มตัวเลือก-XX:-UseGCOverheadLimitในบรรทัดคำสั่ง

แก้ไข: ดูเหมือนว่าบางคนสามารถพิมพ์ได้เร็วกว่าฉัน :)


87
"คุณสามารถปิดสิ่งนี้ได้ ... " แต่ OP น่าจะไม่ควรทำเช่นนี้
สตีเฟ่นซี

2
คุณช่วยบอกความแตกต่างระหว่าง "-XX" กับ "-Xmx" ได้ไหม? ฉันสามารถปิดได้โดยใช้ตัวเลือก "-Xmx" เช่นกัน
Susheel Javadi

19
กำลังตอบกลับความคิดเห็นเก่าแก่มากที่นี่ แต่ ... @Bart -XX:เมื่อเริ่มต้นตัวเลือกบรรทัดคำสั่งหลายรายการจะมีการตั้งค่าสถานะว่าระบุว่าตัวเลือกนี้มีเฉพาะ VM สูงและไม่เสถียร (อาจเปลี่ยนแปลงได้โดยไม่ต้องแจ้งให้ทราบล่วงหน้าในอนาคต) ไม่ว่าในกรณีใด-XX:-UseGCOverheadLimitค่าสถานะจะบอกให้ VM ปิดใช้งานการตรวจสอบขีด จำกัด โอเวอร์เฮดของ GC (อันที่จริง "ปิดใช้งาน") ในขณะที่-Xmxคำสั่งของคุณเพียงเพิ่มฮีป ในกรณีหลังการตรวจสอบค่าโสหุ้ย GC ยังคงทำงานอยู่ดูเหมือนว่าฮีปที่ใหญ่กว่าจะแก้ไขปัญหาการฟาดของ GC ในกรณีของคุณ (ซึ่งจะไม่ช่วยเสมอ)
Andrzej Doyle

1
ในแอปพลิเคชันของฉัน (อ่านไฟล์ Excel ขนาดใหญ่ใน Talend) สิ่งนี้ไม่ทำงานและจากคำอธิบายของผู้ใช้รายอื่นฉันเข้าใจว่าทำไม นี่เป็นเพียงการปิดใช้งานข้อผิดพลาด แต่ปัญหายังคงมีอยู่และแอปพลิเคชันของคุณจะใช้เวลาส่วนใหญ่ในการจัดการ GC เซิร์ฟเวอร์ของเรามี RAM มากมายดังนั้นฉันจึงใช้คำแนะนำโดย Vitalii เพื่อเพิ่มขนาดฮีพ
RobbZ

ในที่สุดคุณจะได้รับข้อผิดพลาดนี้หากแอปพลิเคชันของคุณใช้ข้อมูลมากการล้างหน่วยความจำและการหลีกเลี่ยงการรั่วไหลของข้อมูลเป็นวิธีที่ดีที่สุด แต่ต้องใช้เวลา
Pievis

89

หากคุณแน่ใจว่าไม่มีการรั่วไหลของหน่วยความจำในโปรแกรมของคุณลอง:

  1. -Xmx1gเพิ่มขนาดกองยกตัวอย่างเช่น
  2. -XX:+UseConcMarkSweepGCเปิดใช้งานพร้อมกันเก็บหยุดต่ำ
  3. นำวัตถุที่มีอยู่กลับมาใช้ใหม่เมื่อเป็นไปได้เพื่อบันทึกหน่วยความจำบางส่วน

หากจำเป็นสามารถตรวจสอบการ จำกัดได้โดยการเพิ่มตัวเลือก-XX:-UseGCOverheadLimitในบรรทัดคำสั่ง


9
ฉันไม่เห็นด้วยกับคำแนะนำที่สาม การนำวัตถุที่มีอยู่กลับมาใช้ใหม่จะไม่บันทึกหน่วยความจำ (อย่ารั่วไหลของวัตถุเก่าบันทึกหน่วยความจำ :-) นอกจากนี้ "การนำวัตถุที่มีอยู่กลับมาใช้" เป็นวิธีปฏิบัติเพื่อลดแรงกดดัน GC แต่มันไม่ใช่ความคิดที่ดีเสมอ: ด้วย GC สมัยใหม่เราควรหลีกเลี่ยงสถานการณ์ที่วัตถุเก่าเก็บวัตถุใหม่เพราะมันสามารถทำลายสมมติฐานบางอย่างในพื้นที่ ...
mcoolive

@mcoolive: สำหรับตัวอย่างที่มีการจัดทำขึ้นโปรดดูความคิดเห็นเพื่อตอบstackoverflow.com/a/5640498/4178262ด้านล่าง การสร้างListวัตถุภายในลูปทำให้ GC เรียกว่า 39 ครั้งแทน 22 ครั้ง
Mark Stewart

45

มันมักจะเป็นรหัส นี่คือตัวอย่างง่ายๆ:

import java.util.*;

public class GarbageCollector {

    public static void main(String... args) {

        System.out.printf("Testing...%n");
        List<Double> list = new ArrayList<Double>();
        for (int outer = 0; outer < 10000; outer++) {

            // list = new ArrayList<Double>(10000); // BAD
            // list = new ArrayList<Double>(); // WORSE
            list.clear(); // BETTER

            for (int inner = 0; inner < 10000; inner++) {
                list.add(Math.random());
            }

            if (outer % 1000 == 0) {
                System.out.printf("Outer loop at %d%n", outer);
            }

        }
        System.out.printf("Done.%n");
    }
}

ใช้ Java 1.6.0_24-b07 บน Windows 7 32 บิต

java -Xloggc:gc.log GarbageCollector

จากนั้นดู gc.log

  • ทริกเกอร์ 444 ครั้งโดยใช้วิธีการที่ไม่ดี
  • ทริกเกอร์ 666 ครั้งโดยใช้วิธี WORSE
  • ทริกเกอร์ 354 ครั้งโดยใช้วิธีที่ดีกว่า

ตอนนี้ได้รับแล้วนี่ไม่ใช่การทดสอบที่ดีที่สุดหรือการออกแบบที่ดีที่สุด แต่เมื่อเผชิญกับสถานการณ์ที่คุณไม่มีทางเลือกนอกจากใช้ลูปหรือการจัดการกับโค้ดที่มีอยู่ซึ่งทำงานไม่ดีการเลือกที่จะนำวัตถุกลับมาใช้ใหม่ จำนวนครั้งที่ตัวรวบรวมขยะเข้ามา ...


12
โปรดอธิบาย: เมื่อคุณพูดว่า "Triggered n times" นั่นหมายความว่า GC ปกติเกิดขึ้น n ครั้งหรือว่าข้อผิดพลาด "GC เกินขีด จำกัด โอเวอร์เฮด" ที่รายงานโดย OP เกิดขึ้น n ครั้งหรือไม่
Jon Schneider

ฉันทดสอบตอนนี้โดยใช้ java 1.8.0_91 และไม่เคยมีข้อผิดพลาด / ข้อยกเว้นและ "Triggered n คูณ" นั้นนับจากการนับจำนวนบรรทัดในgc.logไฟล์ การทดสอบของฉันแสดงน้อยลงโดยรวม แต่มี "ทริกเกอร์" น้อยที่สุดสำหรับดีกว่าและตอนนี้ BAD คือ "badder" มากกว่าแย่ที่สุดตอนนี้ การนับของฉัน: BAD: 26, WORSE: 22, BETTER 21 ที่ดีกว่า
มาร์คสจ๊วต

ฉันเพิ่งเพิ่มการดัดแปลง "WORST_YET" โดยที่ฉันกำหนดไว้List<Double> listในลูปด้านนอกแทนก่อนที่จะลูปด้านนอกและเรียกคอลเลกชันขยะ 39 รายการ
Mark Stewart

36

สาเหตุของข้อผิดพลาดตามแพลตฟอร์ม Java [8], คู่มือการแก้ไขปัญหา Standard Edition : (เน้นและเพิ่มตัวแบ่งบรรทัด)

[... ] "เกินขีด จำกัด โอเวอร์เฮดของ GC" บ่งชี้ว่าตัวรวบรวมขยะกำลังทำงานอยู่ตลอดเวลาและโปรแกรม Java กำลังดำเนินการช้ามาก

หลังจากการรวบรวมขยะหากกระบวนการ Java ใช้เวลามากกว่าประมาณ 98% ของเวลาในการทำการรวบรวมขยะและถ้ามีการกู้คืนน้อยกว่า 2% ของกองและได้ทำมาแล้ว 5 ครั้งล่าสุด (ค่าคงที่เวลารวบรวม) คอลเลกชันแล้วjava.lang.OutOfMemoryErrorจะถูกโยน [ ... ]

  1. เพิ่มขนาดฮีปหากฮีปปัจจุบันไม่เพียงพอ
  2. หากคุณยังคงได้รับข้อผิดพลาดนี้หลังจากเพิ่มหน่วยความจำฮีปให้ใช้เครื่องมือทำโปรไฟล์หน่วยความจำเช่นMAT (เครื่องมือวิเคราะห์หน่วยความจำ), Visual VMเป็นต้นและแก้ไขการรั่วไหลของหน่วยความจำ
  3. อัพเกรด JDK เป็นเวอร์ชั่นล่าสุด (1.8.x) หรืออย่างน้อย 1.7.x และใช้อัลกอริทึม G1GC . เป้าหมายปริมาณงานสำหรับ G1 GC คือเวลาสมัคร 90 เปอร์เซ็นต์และเวลารวบรวมขยะ 10 เปอร์เซ็นต์
  4. นอกเหนือจากการตั้งค่าหน่วยความจำฮีปด้วย - Xms1g -Xmx2gลอง

    -XX:+UseG1GC -XX:G1HeapRegionSize=n -XX:MaxGCPauseMillis=m  
    -XX:ParallelGCThreads=n -XX:ConcGCThreads=n

ดูคำถามที่เกี่ยวข้องเพิ่มเติมเกี่ยวกับ G1GC


29

เพียงเพิ่มขนาดฮีพเพียงเล็กน้อยด้วยการตั้งค่าตัวเลือกนี้

เรียกใช้→เรียกใช้การกำหนดค่า→อาร์กิวเมนต์→อาร์กิวเมนต์ VM

-Xms1024M -Xmx2048M

Xms - สำหรับขีด จำกัด ขั้นต่ำ

Xmx - สำหรับขีด จำกัด สูงสุด


2
แอพ android ไม่มีargumentsแท็บ ... เราควรทำอย่างไรเพื่อให้บรรลุเป้าหมายนี้?
Blaze Tama

3
คำตอบนั้นเป็นเครื่องมืออะไร นั่นไม่ใช่คำถาม Eclipse
Michael Piefel

3
ไม่มี "ขีด จำกัด ขั้นต่ำ" -Xms เป็นขนาดเริ่มต้น
Diego Queiroz

1
ขีด จำกัด สูงสุดที่สามารถตั้งได้คือเท่าใด?
JPerk

14

สำหรับฉันแล้วขั้นตอนต่อไปนี้ใช้ได้ผล:

  1. เปิดeclipse.iniไฟล์
  2. เปลี่ยนแปลง

    -Xms40m
    -Xmx512m

    ถึง

    -Xms512m
    -Xmx1024m
  3. รีสตาร์ท Eclipse

ดูที่นี่


วิธีที่ง่ายที่สุดในการแก้ไขปัญหานี้ ขอบคุณ :)
Hamza

1
ไฟล์ eclipse.ini ใน jdev?
Abhinaba Basu

ปัญหายังไม่ได้แก้ไขแม้เมื่อมีการเปลี่ยนแปลงการกำหนดค่านี้
zionpi

1
OP ไม่ได้ถามคำถาม Eclipse
Michael Piefel

1
"คำตอบ" นี้ไม่ตอบคำถามด้านบน
Freitags

13

ลองนี้

เปิดbuild.gradleไฟล์

  android {
        dexOptions {
           javaMaxHeapSize = "4g"
        }
   }

ใช้งานได้ดีสำหรับการจำลอง ความคิดใด ๆ ที่สิ่งนี้มีผลต่ออุปกรณ์จริง? เช่นนี้เป็นความคิดที่ดีหรือเป็นเพียงการปิดบังปัญหาหรือไม่ ขอบคุณ
Joshua Pinter

11

ต่อไปนี้ใช้งานได้สำหรับฉัน เพียงเพิ่มตัวอย่างต่อไปนี้:

android {
        compileSdkVersion 25
        buildToolsVersion '25.0.1'

defaultConfig {
        applicationId "yourpackage"
        minSdkVersion 10
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }
dexOptions {
        javaMaxHeapSize "4g"
    }
}

ใช่เมื่อใช้ Gradle :)
Alex

4
คุณคิดว่านี่เป็นวิธีแก้ปัญหาคำถามของเขาโดยทั่วไปได้อย่างไร คุณสามารถตั้งค่าขนาดฮีของคุณเพื่อ 4g ซึ่งมีทั้งหมดโดยพลการในการกำหนดค่า gradle สำหรับ Android facepalm
Julian L.

7

เพิ่ม javaMaxHeapsize ในไฟล์ build.gradle (Module: app) ของคุณ

dexOptions {
    javaMaxHeapSize "1g"
}

ถึง (เพิ่มบรรทัดนี้ในการไล่ระดับสี)

 dexOptions {
        javaMaxHeapSize "4g"
    }

3

คำอธิบายขนาดของ heap Java heap (xms, xmx, xmn)

-Xms size in bytes

Example : java -Xms32m

ตั้งค่าขนาดเริ่มต้นของ Java heap ขนาดเริ่มต้นคือ 2097152 (2MB) ค่าต้องเป็นจำนวนมากและมากกว่า 1024 ไบต์ (1KB) (แฟล็ก -server เพิ่มขนาดเริ่มต้นเป็น 32M)

-Xmn size in bytes

Example : java -Xmx2m

ตั้งค่าขนาดฮีพ Java เริ่มต้นสำหรับการสร้างอีเดน ค่าเริ่มต้นคือ 640K (แฟล็ก -server เพิ่มขนาดเริ่มต้นเป็น 2M)

-Xmx size in bytes

Example : java -Xmx2048m

ตั้งค่าขนาดสูงสุดที่ฮีปของ Java สามารถเติบโตได้ ขนาดเริ่มต้นคือ 64M (แฟล็ก -server เพิ่มขนาดดีฟอลต์เป็น 128M) ขีด จำกัด ฮีพสูงสุดคือประมาณ 2 GB (2048MB)

การจัดรูปแบบอาร์กิวเมนต์หน่วยความจำ Java (xms, xmx, xmn)

เมื่อตั้งค่าขนาดฮีพของ Java คุณควรระบุอาร์กิวเมนต์หน่วยความจำโดยใช้ตัวอักษร“ m” หรือ“ M” สำหรับ MB หรือ“ g” หรือ“ G” สำหรับ GB การตั้งค่าของคุณจะไม่ทำงานหากคุณระบุ“ MB” หรือ“ GB” อาร์กิวเมนต์ที่ถูกต้องมีลักษณะดังนี้:

-Xms64m หรือ -Xms64M -Xmx1g หรือ -Xmx1G ยังสามารถใช้ 2048MB เพื่อระบุ 2GB และให้แน่ใจว่าคุณใช้ตัวเลขทั้งหมดเมื่อระบุอาร์กิวเมนต์ของคุณ การใช้ -Xmx512m เป็นตัวเลือกที่ถูกต้อง แต่ -Xmx0.5g จะทำให้เกิดข้อผิดพลาด

ข้อมูลอ้างอิงนี้มีประโยชน์สำหรับใครบางคน


2

คุณยังสามารถเพิ่มการจัดสรรหน่วยความจำและขนาดฮีปได้โดยเพิ่มgradle.propertiesไฟล์นี้ในไฟล์ของคุณ:

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

มันไม่จำเป็นต้องเป็น 2048M และ 32g ทำให้มันใหญ่เท่าที่คุณต้องการ


2

แก้ไขได้:
เพียงเพิ่ม
org.gradle.jvmargs=-Xmx1024m
ใน
gradle.properties
และถ้าไม่มีอยู่ให้สร้างขึ้น


0

ฉันกำลังทำงานใน Android Studio และพบข้อผิดพลาดนี้เมื่อพยายามสร้าง APK ที่ลงนามแล้วเพื่อให้เป็นอิสระ ฉันสามารถสร้างและทดสอบ APK ที่ดีบักได้โดยไม่มีปัญหา แต่ทันทีที่ฉันต้องการสร้าง APK ที่วางจำหน่ายกระบวนการสร้างจะทำงานเป็นเวลาหลายนาทีเมื่อสิ้นสุดและสุดท้ายก็จบลงด้วย "Error java.lang.OutOfMemoryError: GC เกินขีด จำกัด ค่าโสหุ้ย " ฉันเพิ่มขนาดฮีพสำหรับทั้งคอมไพเลอร์ VM และ Android DEX แต่ปัญหายังคงอยู่ ในที่สุดหลังจากเวลาผ่านไปหลายชั่วโมงและแก้วกาแฟมันกลับกลายเป็นว่าปัญหาอยู่ในไฟล์ build.gradle 'ระดับแอปของฉัน - ฉันมีพารามิเตอร์' minifyEnabled 'สำหรับประเภท build release ที่ตั้งค่าเป็น' false 'ดังนั้นจึงเรียกใช้ Proguard stuffs ในรหัสที่ยังไม่ผ่านกระบวนการลดขนาดโค้ด (ดูhttps://developer.android) ฉันเปลี่ยนพารามิเตอร์ 'minifyEnabled' เป็น 'true' และบิลด์ที่วางจำหน่ายดำเนินการเหมือนฝัน :)

กล่าวโดยย่อคือฉันต้องเปลี่ยนไฟล์ 'build.gradle' ระดับแอปจาก: // ...

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.sign_config_release
    }
    debug {
        debuggable true
        signingConfig signingConfigs.sign_config_debug
    }
}

//...

ถึง

    //...

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.sign_config_release
    }
    debug {
        debuggable true
        signingConfig signingConfigs.sign_config_debug
    }
}

//...

0

หากต้องการเพิ่มขนาดฮีพใน IntelliJ IDEA ให้ทำตามคำแนะนำต่อไปนี้ มันใช้งานได้สำหรับฉัน

สำหรับผู้ใช้ Windows

ไปที่ตำแหน่งที่ติดตั้ง IDE และค้นหาสิ่งต่อไปนี้

idea64.exe.vmoptions

แก้ไขไฟล์และเพิ่มสิ่งต่อไปนี้

-Xms512m
-Xmx2024m
-XX:MaxPermSize=700m
-XX:ReservedCodeCacheSize=480m

อย่างนั้นแหละ !!


0

คุณสามารถลองทำการเปลี่ยนแปลงการตั้งค่าเซิร์ฟเวอร์โดยอ้างอิงถึงรูปภาพนี้และเพิ่มขนาดหน่วยความจำสำหรับการประมวลผลการเปลี่ยนแปลงเน้นสีเหลือง

คุณยังสามารถเปลี่ยนแปลง java heap ได้ด้วยการเปิด cmd-> set _java_opts -Xmx2g
2g (2gigabytes) ขึ้นอยู่กับความซับซ้อนของโปรแกรมของคุณ

พยายามใช้ตัวแปรค่าคงที่และตัวแปร temp น้อยกว่า

ป้อนคำอธิบายรูปภาพที่นี่


-1

คุณจำเป็นต้องเพิ่มขนาดหน่วยความจำใน Jdeveloper ไปที่setDomainEnv.cmd

set WLS_HOME=%WL_HOME%\server    
set XMS_SUN_64BIT=**256**
set XMS_SUN_32BIT=**256**
set XMX_SUN_64BIT=**3072**
set XMX_SUN_32BIT=**3072**
set XMS_JROCKIT_64BIT=**256**
set XMS_JROCKIT_32BIT=**256**
set XMX_JROCKIT_64BIT=**1024**
set XMX_JROCKIT_32BIT=**1024**

if "%JAVA_VENDOR%"=="Sun" (
    set WLS_MEM_ARGS_64BIT=**-Xms256m -Xmx512m**
    set WLS_MEM_ARGS_32BIT=**-Xms256m -Xmx512m**
) else (
    set WLS_MEM_ARGS_64BIT=**-Xms512m -Xmx512m**
    set WLS_MEM_ARGS_32BIT=**-Xms512m -Xmx512m**
)

และ

set MEM_PERM_SIZE_64BIT=-XX:PermSize=**256m**
set MEM_PERM_SIZE_32BIT=-XX:PermSize=**256m**

if "%JAVA_USE_64BIT%"=="true" (
    set MEM_PERM_SIZE=%MEM_PERM_SIZE_64BIT%
) else (
    set MEM_PERM_SIZE=%MEM_PERM_SIZE_32BIT%
)

set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=**1024m**
set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=**1024m**

4
การตั้งค่าเหล่านี้เฉพาะกับ IDE ในเครื่องของคุณเท่านั้น สิ่งนี้จะไม่ทำงานสำหรับสภาพแวดล้อม Prod
Feng

-1

ใน Netbeans มันอาจมีประโยชน์ในการออกแบบขนาดฮีปสูงสุด Go to Run => การตั้งค่าการกำหนดค่าโครงการ => ปรับแต่ง ในการเรียกใช้ของหน้าต่างโผล่ขึ้นมาของมันไปที่VM ตัวเลือก-Xms2048m -Xmx2048mเติมใน มันสามารถแก้ปัญหาขนาดฮีพได้



-1

ฉันไม่ทราบว่าสิ่งนี้ยังเกี่ยวข้องหรือไม่ แต่เพียงต้องการแบ่งปันสิ่งที่ได้ผลกับฉัน

อัปเดตเวอร์ชั่น kotlin เป็นเวอร์ชั่นล่าสุด https://blog.jetbrains.com/kotlin/category/releases/

และมันก็ทำ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.