คำถามติดแท็ก out-of-memory

ข้อผิดพลาดหรือข้อยกเว้นซึ่งเกิดขึ้นเมื่อโปรแกรมทำการร้องขอหน่วยความจำที่ไม่สามารถตอบสนองได้

22
Android Studio - วิธีเพิ่มขนาดฮีปที่จัดสรร
ฉันใช้ Android Studio มา 3 เดือนแล้วและหนึ่งในแอปที่ฉันเริ่มใช้นั้นมีขนาดใหญ่พอสมควร การใช้หน่วยความจำที่ระบุไว้ที่ด้านล่างขวาของโปรแกรมบอกว่าฮีปที่จัดสรรของฉันสูงสุดที่ 494M เมื่อฉันเริ่มเปลี่ยนไฟล์ XML การใช้หน่วยความจำของฉันถึงขีด จำกัด อย่างรวดเร็วและ IDE ขัดข้องด้วยข้อผิดพลาดหน่วยความจำไม่เพียงพอเช่นนี้ ฉันพยายามเพิ่มขนาดฮีปโดยใช้สิ่งนี้ แต่จนถึงขณะนี้ยังไม่มีผลใด ๆ ฉันได้ดูบทความหลายสิบบทความและคำถามอื่น ๆ เกี่ยวกับวิธีเพิ่มขนาดฮีป แต่ไม่มีคำตอบใดได้ผล ไม่ว่าฉันจะทำอะไรกับ VMOPTIONS หรือการตั้งค่า IDE ขนาดฮีปจะไม่เพิ่มขึ้น ฉันเชื่อว่าฉันกำลังแก้ไขไฟล์ที่ถูกต้องสำหรับ VMOPTIONS เพราะหากฉันจงใจให้คำสั่งที่ไม่ถูกต้อง Android Studio บ่นเกี่ยวกับมันและไม่เริ่มทำงาน ฉันใช้ windows 7 - 64 บิตและมี RAM 16GB มีใครมีปัญหานี้กับ Android Studio อีกบ้าง? และคุณสามารถแก้ไขได้หรือไม่?

2
วิธีที่มีประสิทธิภาพหน่วยความจำมากที่สุดในการปรับขนาดบิตแมปบน Android?
ฉันกำลังสร้างแอปโซเชียลที่เน้นรูปภาพมากซึ่งจะส่งรูปภาพจากเซิร์ฟเวอร์ไปยังอุปกรณ์ เมื่ออุปกรณ์มีความละเอียดหน้าจอเล็กลงฉันจำเป็นต้องปรับขนาดบิตแมปบนอุปกรณ์เพื่อให้ตรงกับขนาดการแสดงผลที่ต้องการ ปัญหาคือการใช้createScaledBitmapทำให้ฉันพบข้อผิดพลาดหน่วยความจำจำนวนมากหลังจากปรับขนาดภาพขนาดย่อจำนวนมาก วิธีใดที่มีประสิทธิภาพมากที่สุดในการปรับขนาดบิตแมปบน Android

14
กำลังจับ java.lang.OutOfMemoryError?
เอกสารสำหรับjava.lang.Errorพูดว่า: ข้อผิดพลาดเป็นคลาสย่อยของ Throwable ที่บ่งชี้ถึงปัญหาร้ายแรงที่แอปพลิเคชันที่สมเหตุสมผลไม่ควรพยายามจับ แต่ในฐานะjava.lang.Errorคลาสย่อยjava.lang.Throwableฉันสามารถจับ Throwable ประเภทนี้ได้ ฉันเข้าใจว่าเหตุใดจึงไม่ควรจับข้อยกเว้นแบบนี้ เท่าที่ฉันเข้าใจถ้าเราตัดสินใจที่จะจับมันตัวจัดการจับไม่ควรจัดสรรหน่วยความจำใด ๆ ด้วยตัวเอง มิฉะนั้นOutOfMemoryErrorจะถูกโยนอีกครั้ง ดังนั้นคำถามของฉันคือ: มีสถานการณ์ในโลกแห่งความเป็นจริงเมื่อจับได้java.lang.OutOfMemoryErrorอาจเป็นความคิดที่ดีหรือไม่? หากเราตัดสินใจที่จะจับjava.lang.OutOfMemoryErrorเราจะแน่ใจได้อย่างไรว่าตัวจัดการการจับไม่ได้จัดสรรหน่วยความจำใด ๆ ด้วยตัวเอง (เครื่องมือหรือแนวทางปฏิบัติที่ดีที่สุด)

11
java.lang.OutOfMemoryError: พื้นที่ฮีป Java
ฉันได้รับข้อผิดพลาดต่อไปนี้ในการเรียกใช้โปรแกรมมัลติเธรด java.lang.OutOfMemoryError: Java heap space ข้อผิดพลาดข้างต้นเกิดขึ้นในหนึ่งในเธรด ถึงความรู้ของฉันพื้นที่ Heap ถูกครอบครองโดยตัวแปรอินสแตนซ์เท่านั้น หากถูกต้องเหตุใดจึงเกิดข้อผิดพลาดหลังจากทำงานได้ดีในบางครั้งเนื่องจากมีการจัดสรรพื้นที่สำหรับตัวแปรอินสแตนซ์ในขณะที่สร้างวัตถุ มีวิธีใดในการเพิ่มพื้นที่ฮีปหรือไม่? ฉันควรทำการเปลี่ยนแปลงอะไรกับโปรแกรมของฉันเพื่อที่จะใช้พื้นที่ฮีปน้อยลง

14
'System.OutOfMemoryException' ถูกโยนทิ้งไปเมื่อยังมีหน่วยความจำเหลืออยู่มากมาย
นี่คือรหัสของฉัน: int size = 100000000; double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb double[] randomNumbers = new double[size]; ข้อยกเว้น: ข้อยกเว้นประเภท 'System.OutOfMemoryException' ถูกโยนทิ้ง ฉันมีหน่วยความจำ 4GB ในเครื่องนี้ 2.5GB ฟรีเมื่อฉันเริ่มการทำงานนี้มีพื้นที่ว่างเพียงพอบนพีซีอย่างชัดเจนที่จะจัดการกับตัวเลขสุ่ม 762mb ของ 100000000 ฉันต้องการจัดเก็บตัวเลขสุ่มให้ได้มากที่สุดเท่าที่จะเป็นไปได้ที่มีหน่วยความจำ เมื่อฉันไปผลิตจะมี 12GB บนกล่องและฉันต้องการใช้ประโยชน์จากมัน CLR บังคับให้ฉันใช้หน่วยความจำสูงสุดเริ่มต้นหรือไม่ และฉันจะขอเพิ่มได้อย่างไร? อัปเดต ฉันคิดว่าการแบ่งสิ่งนี้ออกเป็นชิ้นเล็ก ๆ และการเพิ่มความต้องการหน่วยความจำของฉันทีละน้อยจะช่วยได้หากปัญหาเกิดจากการแยกส่วนหน่วยความจำแต่ฉันไม่สามารถผ่านขนาด ArrayList ทั้งหมดที่มีขนาด 256mb ไม่ว่าฉันจะปรับแต่ง blockSizeก็ตาม …

6
.NET ข้อยกเว้นหน่วยความจำไม่เพียงพอ - ใช้ 1.3GB แต่ติดตั้ง 16GB
ฉันได้รับข้อยกเว้นหน่วยความจำไม่เพียงพอในแอปพลิเคชัน C # ของฉันเมื่อการใช้งานหน่วยความจำสำหรับแอปพลิเคชันเกิน 1.3GB ฉันมีปัญหาเดียวกันนี้ในเครื่อง 32 บิตที่มีหน่วยความจำ 3GB และมันก็สมเหตุสมผลแล้ว แต่ตอนนี้ฉันอัปเกรดฮาร์ดแวร์เป็นเครื่อง 64 บิตที่มีหน่วยความจำ 16GB โดยใช้เมนบอร์ดระดับไฮเอนด์และแรมระดับไฮเอนด์ แต่ข้อยกเว้นหน่วยความจำไม่เพียงพอยังคงเกิดขึ้นหลังจาก 1.3GB! ฉันรู้ว่าไม่มีออบเจ็กต์เดียวที่เกิน 2GB และ 1.3 ก็น้อยกว่า 2GB อยู่ดีดังนั้นขีด จำกัด MS 2GB ในตัวสำหรับอ็อบเจ็กต์เดียวจึงไม่น่าจะเป็นปัญหา ดูเหมือนว่าจะมี kill-switch ของ Windows บางประเภทเมื่อแอปถึงเกณฑ์การใช้หน่วยความจำ จากนั้นควรมีวิธีกำหนดค่านี้ อาจอยู่ในรีจิสทรีหรือไม่? ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก!
92 c#  out-of-memory 

13
Maven Out of Memory Build ล้มเหลว
ณ วันนี้การรวบรวม maven ของฉันล้มเหลว [INFO] [ERROR] Unexpected [INFO] java.lang.OutOfMemoryError: Java heap space [INFO] at java.util.Arrays.copyOfRange(Arrays.java:2694) [INFO] at java.lang.String.<init>(String.java:203) [INFO] at java.lang.String.substring(String.java:1877) [ข้อผิดพลาด] หน่วยความจำไม่เพียงพอ เพื่อเพิ่มจำนวนหน่วยความจำให้ใช้แฟล็ก -Xmx เมื่อเริ่มต้น (java -Xmx128M ... ) เมื่อวานนี้ฉันรัน maven compile สำเร็จแล้ว ณ วันนี้ผมเพิ่งชนกองของฉันไป3 GB นอกจากนี้ฉันเปลี่ยนโค้ดเล็กน้อยเพียง 2-3 บรรทัดดังนั้นฉันจึงไม่เข้าใจข้อผิดพลาด 'หน่วยความจำไม่เพียงพอ' นี้ vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS -Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m แก้ไข: ฉันลองใช้ความคิดเห็นของผู้โพสต์โดยเปลี่ยน …

3
ทำความเข้าใจกับบันทึกของ Linux oom-killer
แอพของฉันถูกฆ่าโดย oom-killer เป็น Ubuntu 11.10 ที่ทำงานบน USB สดโดยไม่มีการแลกเปลี่ยนและพีซีมี RAM 1 Gig แอปเดียวที่ทำงานอยู่ (นอกเหนือจากสิ่งที่สร้างขึ้นใน Ubuntu ทั้งหมด) คือโปรแกรม flasherav ของฉัน โปรดทราบว่า / tmp ถูกแมปหน่วยความจำและในขณะที่เกิดปัญหามีไฟล์อยู่ในนั้นประมาณ 200MB (ดังนั้นจึงใช้ RAM มากถึง 200MB) ฉันพยายามที่จะเข้าใจวิธีวิเคราะห์บันทึก om-killer เพื่อที่ฉันจะเข้าใจว่าหน่วยความจำทั้งหมดถูกใช้ไปที่ใดนั่นคือชิ้นส่วนต่าง ๆ ที่จะรวมกันได้ถึง ~ 1 กิ๊กซึ่งส่งผลให้เกิดการเตะโอม - เพชฌฆาต ใน? เมื่อฉันเข้าใจแล้วฉันสามารถลดการใช้งานของผู้กระทำความผิดเพื่อให้แอปทำงานบนเครื่องที่มีหน่วยความจำ 1 GB คำถามเฉพาะของฉันคือ เพื่อพยายามวิเคราะห์สถานการณ์ฉันสรุปคอลัมน์ "total_vm" และฉันได้รับเพียง 609342KB (ซึ่งเมื่อเพิ่มเข้าไปใน 200MB ใน / …

10
แอพ Android มีปัญหาหน่วยความจำไม่เพียงพอ - ลองทุกอย่างแล้วก็ยังขาดทุน
ฉันใช้เวลา 4 วันเต็มในการพยายามทุกอย่างเท่าที่ทำได้เพื่อหาว่าหน่วยความจำรั่วในแอปที่ฉันกำลังพัฒนา แต่สิ่งต่างๆก็หยุดลงเมื่อนานมาแล้ว แอปที่ฉันกำลังพัฒนานั้นมีลักษณะทางสังคมดังนั้นให้คิดว่าโปรไฟล์กิจกรรม (P) และแสดงรายการกิจกรรมพร้อมข้อมูล - ตัวอย่างเช่นป้าย (B) คุณสามารถกระโดดจากโปรไฟล์ไปยังรายการป้ายไปยังโปรไฟล์อื่น ๆ ไปยังรายการอื่น ๆ ฯลฯ ลองนึกภาพการไหลเช่นนี้ P1 -> B1 -> P2 -> B2 -> P3 -> B3 เป็นต้นเพื่อความสอดคล้องฉันกำลังโหลดโปรไฟล์และป้ายของผู้ใช้คนเดียวกันดังนั้นหน้า P แต่ละหน้าจึงเหมือนกันและเป็นเช่นนั้น แต่ละหน้า B สาระสำคัญทั่วไปของปัญหาคือ: หลังจากนำทางไปสักหน่อยขึ้นอยู่กับขนาดของแต่ละหน้าฉันได้รับข้อยกเว้นหน่วยความจำที่ไม่เพียงพอในตำแหน่งสุ่ม - บิตแมปสตริง ฯลฯ ดูเหมือนจะไม่สอดคล้องกัน หลังจากทำทุกอย่างเท่าที่จะนึกได้ว่าทำไมฉันถึงมีหน่วยความจำไม่เพียงพอฉันก็คิดอะไรไม่ออก สิ่งที่ฉันไม่เข้าใจคือทำไม Android ถึงไม่ฆ่า P1, B1 และอื่น ๆ หากหน่วยความจำหมดเมื่อโหลดและขัดข้องแทน ฉันคาดว่ากิจกรรมก่อนหน้านี้จะตายและฟื้นคืนชีพถ้าฉันกลับไปหาพวกเขาผ่าน onCreate () …

3
Parallel Infinite Java Streams หน่วยความจำไม่เพียงพอ
ฉันพยายามที่จะเข้าใจว่าทำไมโปรแกรม Java ต่อไปนี้ถึงให้OutOfMemoryErrorในขณะที่โปรแกรมที่สอดคล้องกันโดย.parallel()ไม่ได้ System.out.println(Stream .iterate(1, i -> i+1) .parallel() .flatMap(n -> Stream.iterate(n, i -> i+n)) .mapToInt(Integer::intValue) .limit(100_000_000) .sum() ); ฉันมีสองคำถาม: ผลลัพธ์ที่ต้องการของโปรแกรมนี้คืออะไร? หากปราศจาก.parallel()ดูเหมือนว่านี่เป็นเพียงการแสดงผลsum(1+2+3+...)ซึ่งหมายความว่าเพียง "ติด" ที่กระแสแรกใน flatMap ซึ่งทำให้รู้สึก เมื่อใช้คู่ขนานฉันไม่รู้ว่ามีพฤติกรรมที่คาดหวังหรือไม่ แต่ฉันเดาว่าจะเป็นอย่างใดอย่างหนึ่งที่มันแทรกซึมnลำธารสายแรกหรือสายอื่นnๆ มันอาจแตกต่างกันเล็กน้อยขึ้นอยู่กับพฤติกรรมการ chunking / buffering ทำให้หน่วยความจำไม่เพียงพอคืออะไร ฉันพยายามทำความเข้าใจว่ากระแสเหล่านี้ถูกนำไปใช้อย่างไรภายใต้ประทุน ฉันคาดเดาสิ่งที่บล็อกกระแสดังนั้นมันไม่เคยเสร็จสิ้นและสามารถกำจัดค่าที่สร้างขึ้นได้ แต่ฉันไม่ค่อยรู้ว่าสิ่งใดที่เรียงลำดับตามการประเมินและที่การบัฟเฟอร์เกิดขึ้น แก้ไข:ในกรณีที่มีความเกี่ยวข้องฉันใช้ Java 11 Editt 2:เห็นได้ชัดว่าสิ่งเดียวกันที่เกิดขึ้นแม้สำหรับโปรแกรมที่ง่ายIntStream.iterate(1,i->i+1).limit(1000_000_000).parallel().sum()ดังนั้นจึงอาจจะต้องทำอย่างไรกับ lazyness ของมากกว่าlimitflatMap

2
OutOfMemoryException แม้จะใช้ WeakHashMap
หากไม่โทรSystem.gc()ระบบจะส่ง OutOfMemoryException ฉันไม่รู้ว่าทำไมฉันต้องโทรหาSystem.gc()อย่างชัดเจน JVM ควรเรียกgc()ตัวเองใช่ไหม กรุณาแนะนำ ต่อไปนี้เป็นรหัสทดสอบของฉัน: public static void main(String[] args) throws InterruptedException { WeakHashMap<String, int[]> hm = new WeakHashMap<>(); int i = 0; while(true) { Thread.sleep(1000); i++; String key = new String(new Integer(i).toString()); System.out.println(String.format("add new element %d", i)); hm.put(key, new int[1024 * 10000]); key = null; //System.gc(); } …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.