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

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


3
เกิดข้อผิดพลาดในการเปิดไฟล์ HPROF: IOException: Unknown HPROF Version
ฉันได้รับข้อยกเว้นต่อไปนี้เมื่อพยายามเปิดไฟล์ HPROF (สร้างโดยDebug.dumpHprofData) ด้วย Memory Analyzer: java.io.IOException: Unknown HPROF Version (JAVA PROFILE 1.0.3) at org.eclipse.mat.hprof.AbstractParser.readVersion(AbstractParser.java:124) at org.eclipse.mat.hprof.Pass1Parser.read(Pass1Parser.java:69) at org.eclipse.mat.hprof.HprofIndexBuilder.fill(HprofIndexBuilder.java:65) at org.eclipse.mat.parser.internal.SnapshotFactoryImpl.parse(SnapshotFactoryImpl.java:203) at org.eclipse.mat.parser.internal.SnapshotFactoryImpl.openSnapshot(SnapshotFactoryImpl.java:114) at org.eclipse.mat.snapshot.SnapshotFactory.openSnapshot(SnapshotFactory.java:143) at org.eclipse.mat.snapshot.SnapshotFactory.openSnapshot(SnapshotFactory.java:123) at org.eclipse.mat.ui.snapshot.ParseHeapDumpJob.run(ParseHeapDumpJob.java:56) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) ฉันจะแก้ไขปัญหานี้ได้อย่างไร

9
ความจำรั่วไหลไปได้ไกลแค่ไหน?
ฉันเจอปัญหาหน่วยความจำรั่วหลายครั้ง โดยปกติเมื่อฉันรู้สึกmallocเหมือนไม่มีวันพรุ่งนี้หรือห้อยโหนFILE *เหมือนซักผ้าสกปรก โดยทั่วไปฉันถือว่า (อ่าน: หวังเป็นอย่างยิ่ง) ว่าหน่วยความจำทั้งหมดจะถูกล้างอย่างน้อยที่สุดเมื่อโปรแกรมสิ้นสุดลง มีสถานการณ์ใดบ้างที่จะไม่รวบรวมหน่วยความจำที่รั่วไหลเมื่อโปรแกรมหยุดทำงานหรือล่ม? หากคำตอบแตกต่างกันอย่างมากในแต่ละภาษาให้เน้นที่ C (++) โปรดสังเกตการใช้วลีที่เกินความจริงเช่น 'เหมือนไม่มีวันพรุ่งนี้' และ 'ห้อย ... เหมือนซักผ้าสกปรก' ความไม่ปลอดภัย * malloc* อาจทำร้ายคนที่คุณรักได้ นอกจากนี้โปรดใช้ความระมัดระวังในการซักผ้าที่สกปรก
118 c++  c  memory  memory-leaks 

6
หน่วยความจำที่รั่วไหลจะปลดปล่อยเมื่อออกจากโปรแกรมหรือไม่?
หากฉันตั้งโปรแกรม - โดยไม่รู้ตัว - หน่วยความจำรั่วและแอปพลิเคชันหยุดทำงานหน่วยความจำที่รั่วไหลจะเป็นอิสระหรือไม่?
117 c++  memory-leaks 

12
เกิดการรั่วไหลของหน่วยความจำหาก MemoryStream ใน. NET ไม่ได้ปิด?
ฉันมีรหัสต่อไปนี้: MemoryStream foo(){ MemoryStream ms = new MemoryStream(); // write stuff to ms return ms; } void bar(){ MemoryStream ms2 = foo(); // do stuff with ms2 return; } มีโอกาสไหมที่ MemoryStream ที่ฉันจัดสรรไว้จะล้มเหลวในการกำจัดทิ้งในภายหลัง? ฉันได้รับการตรวจสอบจากเพื่อนโดยยืนยันว่าฉันปิดสิ่งนี้ด้วยตนเองและฉันไม่พบข้อมูลที่จะบอกได้ว่าเขามีประเด็นที่ถูกต้องหรือไม่

1
มีวิธีที่จะบอกได้โดยทางโปรแกรมหรือไม่ว่า FastMM บล็อกหน่วยความจำบางส่วนไม่ได้เป็นอิสระหรือไม่?
ฉันกำลังพยายามตรวจสอบว่าบล็อกหน่วยความจำไม่ได้รับการปลดปล่อยหรือไม่ แน่นอนผู้จัดการบอกฉันโดยใช้กล่องโต้ตอบหรือไฟล์บันทึก แต่ถ้าฉันต้องการเก็บผลลัพธ์ในฐานข้อมูลล่ะ? ตัวอย่างเช่นฉันต้องการมีชื่อของรูทีนในตารางฐานข้อมูลที่จัดสรรบล็อกที่กำหนดไว้ในตารางฐานข้อมูล หลังจากอ่านเอกสารของ FastMM ฉันรู้ว่าตั้งแต่เวอร์ชัน 4.98 เรามีความเป็นไปได้ที่จะได้รับแจ้งจากผู้จัดการเกี่ยวกับการจัดสรรหน่วยความจำอิสระและการจัดสรรใหม่เมื่อเกิดขึ้น ตัวอย่างเช่นOnDebugFreeMemFinishเหตุการณ์ที่ส่งถึงเราPFullDebugBlockHeaderซึ่งมีข้อมูลที่เป็นประโยชน์ มีสิ่งหนึ่งที่PFullDebugBlockHeaderขาดหายไป - ข้อมูลหากแอปพลิเคชันเป็นอิสระจากบล็อกที่ระบุ เว้นแต่OnDebugFreeMemFinishจะถูกเรียกเฉพาะสำหรับบล็อกที่ไม่เป็นอิสระ? นี่คือสิ่งที่ฉันไม่ทราบและต้องการค้นหา ปัญหาคือแม้แต่การเชื่อมต่อในOnDebugFreeMemFinishกรณีที่ฉันไม่สามารถค้นหาได้ว่าบล็อกนั้นเป็นอิสระหรือไม่ นี่คือตัวอย่าง: program MemLeakTest; {$APPTYPE CONSOLE} uses FastMM4, ExceptionLog, SysUtils; procedure MemFreeEvent(APHeaderFreedBlock: PFullDebugBlockHeader; AResult: Integer); begin //This is executed at the end, but how should I know that this block should be freed //by application? …

13
การวินิจฉัยการรั่วไหลของหน่วยความจำ - ขนาดหน่วยความจำที่อนุญาตเป็น # ไบต์หมด
ฉันพบข้อความแสดงข้อผิดพลาดที่น่ากลัวซึ่งอาจเป็นไปได้ด้วยความพยายามอย่างเต็มที่ PHP มีหน่วยความจำไม่เพียงพอ: ขนาดหน่วยความจำที่อนุญาต #### ไบต์หมด (พยายามจัดสรร #### ไบต์) ใน file.php ในบรรทัด 123 เพิ่มขีด จำกัด หากคุณรู้ว่าคุณกำลังทำอะไรอยู่และต้องการเพิ่มขีด จำกัด โปรดดูmemory_limit : ini_set('memory_limit', '16M'); ini_set('memory_limit', -1); // no limit ระวัง! คุณอาจจะแก้ปัญหาได้เท่านั้นไม่ใช่ปัญหา! การวินิจฉัยการรั่วไหล: ข้อความแสดงข้อผิดพลาดชี้ไปที่เส้นที่มีการวนซ้ำซึ่งฉันเชื่อว่ามีการรั่วไหลหรือกำลังสะสมหน่วยความจำโดยไม่จำเป็น ฉันได้พิมพ์memory_get_usage()คำสั่งเมื่อสิ้นสุดการทำซ้ำแต่ละครั้งและสามารถเห็นจำนวนที่เพิ่มขึ้นอย่างช้าๆจนกว่าจะถึงขีด จำกัด : foreach ($users as $user) { $task = new Task; $task->run($user); unset($task); // Free the variable in an …
98 php  memory-leaks 

7
การกระจายตัวของวัตถุขนาดใหญ่
แอปพลิเคชัน C # /. NET ที่ฉันกำลังทำงานอยู่มีปัญหาหน่วยความจำรั่วช้า ฉันใช้ CDB กับ SOS เพื่อตรวจสอบสิ่งที่เกิดขึ้น แต่ดูเหมือนว่าข้อมูลจะไม่สมเหตุสมผลดังนั้นฉันหวังว่าคุณคนใดคนหนึ่งอาจเคยมีประสบการณ์นี้มาก่อน แอปพลิเคชันกำลังทำงานบนเฟรมเวิร์ก 64 บิต มันกำลังคำนวณและจัดลำดับข้อมูลไปยังโฮสต์ระยะไกลอย่างต่อเนื่องและกำลังกดปุ่ม Large Object Heap (LOH) อยู่พอสมควร อย่างไรก็ตามวัตถุ LOH ส่วนใหญ่ที่ฉันคาดว่าจะเป็นแบบชั่วคราว: เมื่อการคำนวณเสร็จสมบูรณ์และถูกส่งไปยังโฮสต์ระยะไกลหน่วยความจำควรจะว่าง อย่างไรก็ตามสิ่งที่ฉันเห็นคืออาร์เรย์อ็อบเจ็กต์ (สด) จำนวนมากที่สอดแทรกด้วยบล็อกหน่วยความจำว่างเช่นการสุ่มเซกเมนต์จาก LOH: 0:000> !DumpHeap 000000005b5b1000 000000006351da10 Address MT Size ... 000000005d4f92e0 0000064280c7c970 16147872 000000005e45f880 00000000001661d0 1901752 Free 000000005e62fd38 00000642788d8ba8 1056 <-- 000000005e630158 00000000001661d0 …

1
ไม่เคยแก้ไขสัญญาทำให้หน่วยความจำรั่ว?
ฉันมีPromise. ฉันสร้างมันขึ้นเพื่อยกเลิกคำขอ AJAX หากจำเป็น แต่เนื่องจากฉันไม่จำเป็นต้องยกเลิก AJAX นั้นฉันจึงไม่เคยแก้ไขเลยและ AJAX ก็ทำสำเร็จ ข้อมูลโค้ดแบบง่าย: var defer = $q.defer(); $http({url: 'example.com/some/api', timeout: defer.promise}).success(function(data) { // do something }); // Never defer.resolve() because I don't need to cancel that ajax. What happens to this promise after request? ไม่เคยแก้สัญญาเช่นนั้นทำให้หน่วยความจำรั่วไหล? คุณมีคำแนะนำเกี่ยวกับการจัดการPromiseวงจรชีวิตหรือไม่?

5
Go อยู่ภายใต้การรั่วไหลของหน่วยความจำเล็กน้อยเช่นเดียวกับ Java หรือไม่?
นี่คือข้อเท็จจริง: ภาษา Go มีคนเก็บขยะ Java มีที่เก็บขยะ โปรแกรม Java จำนวนมากมีการรั่วไหลของหน่วยความจำ (บอบบางหรือไม่) ดังตัวอย่างโปรแกรม Java ที่มีหน่วยความจำรั่ว (ไม่ใช่สำหรับคนใจร้อนคำถามอาจสั่นคลอนความเชื่อของคุณ) ดูที่นี่เกี่ยวกับโปรแกรม Java เล็ก ๆ ที่เรียกว่า Tomcat ที่มีปุ่ม "find leaks": มีวิธี เพื่อหลีกเลี่ยงการรั่วไหลของหน่วยความจำที่ไม่ได้ใช้งานใน Tomcat? ดังนั้นฉันจึงสงสัยว่า: โปรแกรมที่เขียนใน Go จะแสดงการรั่วไหลของหน่วยความจำ (ที่ละเอียดอ่อนหรือไม่) แบบเดียวกับที่บางโปรแกรมที่เขียนด้วย Java จัดแสดงหรือไม่?
91 java  memory-leaks  go 

11
ความหมายของนามธรรมที่รั่วไหล?
คำว่า "สิ่งที่เป็นนามธรรมที่รั่วไหล" หมายความว่าอย่างไร (โปรดอธิบายด้วยตัวอย่างฉันมักจะมีปัญหาในการฟังทฤษฎีเพียงอย่างเดียว)

17
นับจำนวนบรรทัดของไฟล์ข้อความได้อย่างมีประสิทธิภาพ (200mb +)
ฉันเพิ่งพบว่าสคริปต์ของฉันทำให้ฉันมีข้อผิดพลาดร้ายแรง: Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 440 bytes) in C:\process_txt.php on line 109 บรรทัดนั้นคือ: $lines = count(file($path)) - 1; ฉันคิดว่ามันมีปัญหาในการโหลดไฟล์ลงใน memeory และการนับจำนวนบรรทัดมีวิธีที่มีประสิทธิภาพมากกว่านี้ไหมที่ฉันสามารถทำได้โดยไม่ต้องมีปัญหาเรื่องหน่วยความจำ ไฟล์ข้อความที่ฉันต้องนับจำนวนบรรทัดสำหรับช่วงตั้งแต่ 2MB ถึง 500MB บางทีกิ๊ก ขอบคุณสำหรับความช่วยเหลือใด ๆ

1
Navigation Arch Component สร้างการรั่วไหลของหน่วยความจำบวกที่ผิดพลาดหรือไม่
ฉันมีความรู้พื้นฐานเกี่ยวกับการรั่วไหลของหน่วยความจำและสิ่งที่สามารถทำให้พวกเขา นั่นเป็นเหตุผลที่ฉันไม่เข้าใจถ้าฉันมีปัญหาในรหัสของฉันหรือมันเป็นบวกที่ผิดพลาด ฉันไม่ทราบว่าฉันควรแบ่งปันรหัสส่วนใดเนื่องจากโครงการไม่เล็ก แต่เพียงแค่แจ้งให้เราทราบในความคิดเห็นและฉันจะเพิ่มรหัสที่จำเป็น ฉันใช้คอมโพเนนต์ arch navigation และทำตามรูปแบบ MVVM ฉันเพิ่มห้องสมุด LeakCanary ในภายหลังในการพัฒนาโครงการและมันก็เริ่มให้คำเตือนเกี่ยวกับอินสแตนซ์ที่เก็บไว้ทันทีเมื่อฉันนำทางระหว่างหน้าจอ ปัญหาเกิดขึ้นเมื่อฉันเพิ่มแฟรกเมนต์ลงในสแต็กหลัง เมื่อเพิ่มแฟรกเมนต์ที่เพิ่มลงในสแต็กหลังแต่ละตัวนับอินสแตนซ์ที่เก็บไว้จะเพิ่มขึ้น เมื่อถึงค่าขีด จำกัด 5 LeakCanary จะทิ้งฮีปและจัดทำรายงาน แต่ถ้าฉันคลิกที่ปุ่มย้อนกลับและกลับสู่หน้าจอก่อนหน้าตัวนับอินสแตนซ์ที่เก็บไว้จะลดลงและในที่สุดเมื่อกลับสู่หน้าจอที่ 1 อินสแตนซ์ที่เก็บไว้ทั้งหมดจะหายไป ถ้าฉันดูรายงานการวิเคราะห์ฮีปมันบอกว่าตัวแปร CoordinatorLayout ซึ่งเป็นการอ้างอิงถึงCoordinatorLayoutin in xml ได้รั่วไหลออกมา หากฉันลบตัวแปรและการใช้งานทั้งหมดแล้วเรียกใช้แอปอีกครั้งฉันเห็นปัญหาเดียวกัน แต่ตอนนี้มีตัวแปรอื่นที่อ้างอิงถึงมุมมองอื่นใน xml ฉันพยายามลบมุมมองทั้งหมดและการใช้งานที่ LeakCanary รายงานว่าเป็นการรั่วไหล เมื่อมันบอกว่า a TextViewซึ่งเพิ่งใช้ในการตั้งค่าข้อความonViewCreatedและไม่ได้ใช้ที่อื่นถูกรั่วฉันเริ่มสงสัยว่ามีปัญหาในรหัสของฉัน ผมวิเคราะห์วิธีวงจรสายในชิ้นส่วนและพบว่าเมื่อฉันนำทางไปยังหน้าจอใหม่สำหรับส่วนที่ก่อนหน้านี้จนถึงวิธีการทั้งหมดและรวมถึงการonDestroyViewได้รับการเรียก onDestroyแต่ไม่ เมื่อฉันคลิกย้อนกลับonDestroyถูกเรียกสำหรับแฟรกเมนต์ที่อยู่ด้านบนของสแต็กหลังและตัวนับอินสแตนซ์ที่เก็บไว้จะลดลง ฉันสงสัยว่าองค์ประกอบการนำทางจะรักษาอินสแตนซ์ของชิ้นส่วนเมื่อมันอยู่ในกองหลังและ LeakCanary เห็นว่าเป็นรอยรั่ว

1
อาร์เรย์ Java byte ขนาด 1 MB หรือมากกว่านั้นใช้ RAM เป็นสองเท่า
เล่นโค้ดด้านล่างบน Windows 10 / OpenJDK 11.0.4_x64 ผลิตเป็นผลผลิตและused: 197 expected usage: 200ซึ่งหมายความว่าอาร์เรย์ 200 ไบต์ของหนึ่งล้านองค์ประกอบใช้เวลาประมาณ RAM 200MB ทุกอย่างดี เมื่อฉันเปลี่ยนการจัดสรรอาร์เรย์ไบต์ในรหัสจากnew byte[1000000]ไปnew byte[1048576](นั่นคือ 1024 * 1024 องค์ประกอบ) จะผลิตเป็นผลผลิตและused: 417 expected usage: 200ห่า? import java.io.IOException; import java.util.ArrayList; public class Mem { private static Runtime rt = Runtime.getRuntime(); private static long free() { return rt.maxMemory() - …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.