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

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

30
วิธีการสร้างหน่วยความจำรั่วใน Java?
ฉันเพิ่งได้รับการสัมภาษณ์และฉันถูกขอให้สร้างหน่วยความจำรั่วด้วย Java ไม่จำเป็นต้องพูดอะไรเลยฉันรู้สึกงี่เง่าที่ไม่มีเงื่อนงำว่าจะเริ่มสร้างได้อย่างไร ตัวอย่างจะเป็นอย่างไร
3223 java  memory  memory-leaks 

19
performSelector อาจทำให้เกิดการรั่วไหลเนื่องจากไม่รู้จักตัวเลือก
ฉันได้รับคำเตือนต่อไปนี้โดยคอมไพเลอร์ ARC: "performSelector may cause a leak because its selector is unknown". นี่คือสิ่งที่ฉันทำ: [_controller performSelector:NSSelectorFromString(@"someMethod")]; เหตุใดฉันจึงได้รับคำเตือนนี้ ฉันเข้าใจว่าคอมไพเลอร์ไม่สามารถตรวจสอบว่ามีตัวเลือกอยู่หรือไม่ แต่ทำไมมันถึงทำให้เกิดการรั่ว และฉันจะเปลี่ยนรหัสของฉันอย่างไรเพื่อที่ฉันจะไม่ได้รับคำเตือนนี้อีกต่อไป?

30
การจัดการกับข้อผิดพลาด“ java.lang.OutOfMemoryError: พื้นที่ PermGen”
เมื่อเร็ว ๆ นี้ฉันพบข้อผิดพลาดในเว็บแอปพลิเคชันของฉัน: java.lang.OutOfMemoryError: พื้นที่ PermGen มันเป็นแอปพลิเคชั่น Hibernate / JPA + IceFaces / JSF ที่ทำงานบน Tomcat 6 และ JDK 1.6 เห็นได้ชัดว่าสิ่งนี้อาจเกิดขึ้นได้หลังจากปรับใช้แอปพลิเคชันอีกครั้งสองสามครั้ง อะไรเป็นสาเหตุและสิ่งที่สามารถทำได้เพื่อหลีกเลี่ยง ฉันจะแก้ไขปัญหาได้อย่างไร

30
กิจกรรมมีหน้าต่างที่รั่วไหลออกมาซึ่งเพิ่มเข้ามา แต่เดิม
ข้อผิดพลาดนี้คืออะไรและทำไมจึงเกิดขึ้น 05-17 18:24:57.069: ERROR/WindowManager(18850): Activity com.mypkg.myP has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44c46ff0 that was originally added here 05-17 18:24:57.069: ERROR/WindowManager(18850): android.view.WindowLeaked: Activity ccom.mypkg.myP has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44c46ff0 that was originally added here 05-17 18:24:57.069: ERROR/WindowManager(18850): at android.view.ViewRoot.<init>(ViewRoot.java:231) 05-17 18:24:57.069: ERROR/WindowManager(18850): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 05-17 18:24:57.069: ERROR/WindowManager(18850): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 05-17 18:24:57.069: ERROR/WindowManager(18850): at android.view.Window$LocalWindowManager.addView(Window.java:424) …

4
ไบต์ส่วนตัว, ไบต์เสมือน, ชุดการทำงานคืออะไร
ฉันพยายามใช้ยูทิลิตี perfmon windows เพื่อดีบักการรั่วไหลของหน่วยความจำในกระบวนการ นี่คือวิธีที่ perfmon อธิบายข้อกำหนด: Working Setเป็นขนาดปัจจุบันเป็นไบต์ของ Working Set ของกระบวนการนี้ Working Set เป็นชุดของหน้าหน่วยความจำที่เพิ่งสัมผัสโดยเธรดในกระบวนการ หากหน่วยความจำว่างในคอมพิวเตอร์สูงกว่าขีด จำกัด หน้าเว็บจะอยู่ในชุดการทำงานของกระบวนการแม้ว่าจะไม่ได้ใช้งานก็ตาม เมื่อหน่วยความจำที่ว่างต่ำกว่าเกณฑ์หน้าจะถูกตัดออกจากชุดการทำงาน หากพวกเขาต้องการพวกเขาจะถูกนำกลับไปที่ชุดการทำงานก่อนที่จะออกจากหน่วยความจำหลัก ไบต์เสมือนเป็นขนาดปัจจุบันเป็นไบต์ของพื้นที่ที่อยู่เสมือนที่กระบวนการใช้ การใช้พื้นที่ที่อยู่เสมือนไม่จำเป็นต้องบ่งบอกถึงการใช้งานที่สอดคล้องกันของหน้าดิสก์หรือหน่วยความจำหลัก พื้นที่เสมือนมี จำกัด และกระบวนการสามารถจำกัดความสามารถในการโหลดไลบรารี Private Bytesเป็นขนาดหน่วยความจำปัจจุบันของหน่วยความจำที่กระบวนการนี้จัดสรรไว้ซึ่งไม่สามารถแชร์กับกระบวนการอื่นได้ นี่คือคำถามที่ฉันมี: เป็นไบต์ส่วนตัวที่ฉันควรวัดเพื่อให้แน่ใจว่ากระบวนการมีการรั่วไหลใด ๆ เนื่องจากไม่เกี่ยวข้องกับไลบรารีที่ใช้ร่วมกันและการรั่วไหลใด ๆ หากเกิดขึ้นจะมาจากกระบวนการเองหรือไม่ หน่วยความจำทั้งหมดที่ใช้โดยกระบวนการเป็นเท่าใด มันเป็นไบต์เสมือนหรือเป็นผลรวมของไบต์เสมือนและชุดการทำงาน มีความสัมพันธ์ระหว่างไบต์ส่วนตัว, ชุดการทำงานและไบต์เสมือนหรือไม่? มีเครื่องมืออื่นใดที่ให้แนวคิดที่ดีกว่าเกี่ยวกับการใช้หน่วยความจำหรือไม่?



1
เมื่อใดจึงจะปลอดภัยในการใช้คลาสภายใน (ไม่ระบุชื่อ)
ผมได้อ่านบทความบางอย่างเกี่ยวกับการรั่วไหลของหน่วยความจำใน Android และดูวิดีโอที่น่าสนใจนี้จาก Google I / O ในเรื่อง แต่ฉันก็ยังไม่เข้าใจแนวคิดและโดยเฉพาะอย่างยิ่งเมื่อมันมีความปลอดภัยหรือเป็นอันตรายต่อผู้ใช้เรียนภายในภายในกิจกรรม นี่คือสิ่งที่ฉันเข้าใจ: หน่วยความจำรั่วจะเกิดขึ้นหากอินสแตนซ์ของคลาสภายในมีชีวิตอยู่นานกว่าคลาสภายนอก (กิจกรรม) -> สิ่งนี้สามารถเกิดขึ้นได้ในสถานการณ์ใด ในตัวอย่างนี้ฉันคิดว่าไม่มีความเสี่ยงต่อการรั่วไหลเนื่องจากไม่มีวิธีใดที่การขยายคลาสแบบไม่ระบุชื่อOnClickListenerจะใช้งานได้นานกว่ากิจกรรมใช่ไหม final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.dialog_generic); Button okButton = (Button) dialog.findViewById(R.id.dialog_button_ok); TextView titleTv = (TextView) dialog.findViewById(R.id.dialog_generic_title); // *** Handle button click okButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { dialog.dismiss(); } }); titleTv.setText("dialog title"); …

7
คลาสตัวจัดการนี้ควรเป็นแบบคงที่หรืออาจเกิดการรั่วไหล: IncomingHandler
ฉันกำลังพัฒนาแอปพลิเคชัน Android 2.3.3 พร้อมบริการ ฉันมีสิ่งนี้ในบริการที่จะสื่อสารกับกิจกรรมหลัก: public class UDPListenerService extends Service { private static final String TAG = "UDPListenerService"; //private ThreadGroup myThreads = new ThreadGroup("UDPListenerServiceWorker"); private UDPListenerThread myThread; /** * Handler to communicate from WorkerThread to service. */ private Handler mServiceHandler; // Used to receive messages from the Activity final Messenger …

5
การรั่วไหลของชนิดใดที่การอ้างอิงอัตโนมัติใน Objective-C ไม่ป้องกันหรือย่อให้เล็กสุด
ในแพลตฟอร์ม Mac และ iOS หน่วยความจำรั่วมักเกิดจากพอยน์เตอร์ที่ไม่ได้เผยแพร่ ตามเนื้อผ้ามันมีความสำคัญสูงสุดเสมอในการตรวจสอบ allocs ของคุณคัดลอกและเก็บเพื่อให้แน่ใจว่าแต่ละคนมีข้อความปล่อยที่สอดคล้องกัน Toolchain ที่มาพร้อมกับ Xcode 4.2 แนะนำการนับจำนวนการอ้างอิงอัตโนมัติ (ARC) ด้วยตัวแปล LLVMเวอร์ชั่นล่าสุดซึ่งแก้ไขปัญหานี้ได้อย่างสมบูรณ์ มันเจ๋งมากและมันช่วยลดเวลาในการพัฒนาที่ไม่จำเป็นออกไปทางโลกและป้องกันการรั่วไหลของหน่วยความจำที่ไม่ประมาทจำนวนมากซึ่งง่ายต่อการแก้ไขด้วยการรักษา / ปล่อยสมดุลที่เหมาะสม แม้กระทั่งระบบพูลอัตโนมัติที่ต้องจัดการแตกต่างกันเมื่อคุณเปิดใช้งาน ARC สำหรับแอป Mac และ iOS (เพราะคุณไม่ควรจัดสรรNSAutoreleasePoolอีกต่อไป) แต่การรั่วไหลของหน่วยความจำอื่น ๆมันไม่ได้ป้องกันไม่ให้ฉันยังต้องระวัง? เป็นโบนัสอะไรคือความแตกต่างระหว่าง ARC บน Mac OS X และ iOS และการเก็บขยะบน Mac OS X

30
หน่วยความจำรั่วไหลตกลงไหม [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เป็นที่ยอมรับหรือไม่ว่ามีหน่วยความจำรั่วในแอพพลิเคชั่น C หรือ C ++ ของคุณ? จะเกิดอะไรขึ้นถ้าคุณจัดสรรหน่วยความจำบางส่วนและใช้จนถึงรหัสบรรทัดสุดท้ายในแอปพลิเคชันของคุณ (ตัวอย่างเช่น destructor ของวัตถุระดับโลก) ตราบใดที่ปริมาณการใช้หน่วยความจำไม่เพิ่มขึ้นเรื่อย ๆ มันก็โอเคที่จะไว้ใจระบบปฏิบัติการให้เพิ่มหน่วยความจำให้คุณหรือเปล่าเมื่อแอปพลิเคชันของคุณถูกยกเลิก (ใน Windows, Mac และ Linux)? คุณจะพิจารณาเรื่องนี้ว่าหน่วยความจำจริงรั่วไหลหรือไม่หากหน่วยความจำนั้นถูกใช้อย่างต่อเนื่องจนกว่า OS จะเป็นอิสระ ถ้าห้องสมุดบุคคลที่สามบังคับให้คุณทำเช่นนี้ล่ะ จะปฏิเสธที่จะใช้ห้องสมุดบุคคลที่สามไม่ว่ามันจะดีแค่ไหน ฉันเห็นข้อเสียเพียงข้อเดียวในทางปฏิบัติและนั่นก็คือการรั่วไหลที่ไม่เป็นอันตรายเหล่านี้จะปรากฏขึ้นพร้อมกับเครื่องมือตรวจจับการรั่วไหลของหน่วยความจำว่าเป็นผลบวกปลอม
231 c++  c  memory-leaks 

18
ตรวจพบการรั่วไหลของหน่วยความจำ EventEmitter ที่เป็นไปได้
ฉันได้รับคำเตือนต่อไปนี้: (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. Trace: at EventEmitter.<anonymous> (events.js:139:15) at EventEmitter.<anonymous> (node.js:385:29) at Server.<anonymous> (server.js:20:17) at Server.emit (events.js:70:17) at HTTPParser.onIncoming (http.js:1514:12) at HTTPParser.onHeadersComplete (http.js:102:31) at Socket.ondata (http.js:1410:22) at TCP.onread (net.js:354:27) ฉันเขียนโค้ดลักษณะนี้ใน server.js: http.createServer( function (req, res) { ... }).listen(3013); …

9
จำเป็นหรือไม่ที่จะยกเลิกการเป็นสมาชิกจากสิ่งที่สังเกตได้ที่สร้างโดยวิธี Http?
คุณต้องการยกเลิกการสมัครจากการโทร http ของ Angular 2 เพื่อป้องกันการรั่วไหลของหน่วยความจำหรือไม่? fetchFilm(index) { var sub = this._http.get(`http://example.com`) .map(result => result.json()) .map(json => { dispatch(this.receiveFilm(json)); }) .subscribe(e=>sub.unsubscribe()); ...

30
Valgrind ใช้แทน Windows ได้ดีหรือไม่?
ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันกำลังมองหา Valgrind เพื่อช่วยปรับปรุงการเข้ารหัส / การดีบัก C ของฉันเมื่อฉันค้นพบว่ามันเป็นเพียงสำหรับ Linux - ฉันไม่มีความต้องการหรือความสนใจในการย้ายระบบปฏิบัติการของฉันไปยัง Linux ดังนั้นฉันสงสัยว่ามีโปรแกรมที่ดีสำหรับ Windows

1
AngularJS - $ ทำลายเอาผู้ฟังเหตุการณ์หรือไม่
https://docs.angularjs.org/guide/directive โดยการฟังเหตุการณ์นี้คุณสามารถลบผู้ฟังเหตุการณ์ที่อาจทำให้เกิดการรั่วไหลของหน่วยความจำ ผู้ฟังที่ลงทะเบียนกับขอบเขตและองค์ประกอบจะถูกล้างข้อมูลโดยอัตโนมัติเมื่อพวกเขาถูกทำลาย แต่ถ้าคุณลงทะเบียนผู้ฟังในบริการหรือลงทะเบียนผู้ฟังบนโหนด DOM ที่ไม่ได้ถูกลบคุณจะต้องล้างมันเองหรือ คุณเสี่ยงต่อการรั่วไหลของหน่วยความจำ การปฏิบัติที่ดีที่สุด: คำสั่งควรล้างหลังจากตัวเอง คุณสามารถใช้ element.on ('$ destroy', ... ) หรือขอบเขต $ on ('$ destroy', ... ) เพื่อเรียกใช้ฟังก์ชันล้างข้อมูลเมื่อลบคำสั่ง คำถาม: ฉันมีelement.on "click", (event) ->คำสั่งภายใน: เมื่อคำสั่งถูกทำลายมีหน่วยความจำอ้างอิงถึงelement.onเพื่อป้องกันไม่ให้ถูกเก็บขยะหรือไม่ เอกสารเชิงมุมระบุว่าฉันควรใช้ตัวจัดการเพื่อลบตัวรับฟังเหตุการณ์ใน$destroyเหตุการณ์ที่ปล่อยออกมา ฉันอยู่ภายใต้การแสดงผลที่destroy()ลบผู้ฟังกิจกรรมออกใช่ไหม

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