คำถามติดแท็ก garbage-collection

Garbage collection (GC) เป็นรูปแบบของการจัดการหน่วยความจำอัตโนมัติซึ่งพยายามเรียกคืนขยะหรือหน่วยความจำที่ถูกครอบครองโดยอ็อบเจ็กต์ที่ไม่ได้ใช้งานโดยโปรแกรมอีกต่อไป

4
ตัวจัดการเหตุการณ์หยุดการรวบรวมขยะหรือไม่?
หากฉันมีรหัสต่อไปนี้: MyClass pClass = new MyClass(); pClass.MyEvent += MyFunction; pClass = null; pClass จะถูกรวบรวมขยะหรือไม่ หรือมันจะแขวนรอบยังคงยิงเหตุการณ์เมื่อใดก็ตามที่พวกเขาเกิดขึ้น? ฉันจะต้องทำสิ่งต่อไปนี้เพื่ออนุญาตการเก็บขยะหรือไม่ MyClass pClass = new MyClass(); pClass.MyEvent += MyFunction; pClass.MyEvent -= MyFunction; pClass = null;

2
ทำความเข้าใจกับการรวบรวมขยะใน. NET
พิจารณารหัสด้านล่าง: public class Class1 { public static int c; ~Class1() { c++; } } public class Class2 { public static void Main() { { var c1=new Class1(); //c1=null; // If this line is not commented out, at the Console.WriteLine call, it prints 1. } GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine(Class1.c); // prints 0 …

6
วิธีการปิด JavaScript ถูกเก็บขยะ
ฉันได้บันทึกข้อผิดพลาดของ Chromeต่อไปนี้ซึ่งนำไปสู่การรั่วไหลของหน่วยความจำที่ร้ายแรงและไม่ชัดเจนในรหัสของฉัน: (ผลลัพธ์เหล่านี้ใช้เครื่องมือสร้างโปรไฟล์หน่วยความจำของ Chrome Dev Tools ซึ่งรัน GC และจากนั้นใช้ภาพรวมกองของทุกสิ่งที่ไม่ได้เก็บรวบรวมไว้) ในรหัสด้านล่างนี้someClassอินสแตนซ์นั้นเก็บรวบรวมขยะ (ดี): var someClass = function() {}; function f() { var some = new someClass(); return function() {}; } window.f_ = f(); แต่จะไม่เก็บขยะในกรณีนี้ (ไม่ดี): var someClass = function() {}; function f() { var some = new someClass(); function unreachable() { some; …

11
วิธีจัดการ: java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize () หมดเวลาหลังจากข้อผิดพลาด 10 วินาที?
เราเห็นจำนวนของTimeoutExceptionsในและGcWatcher.finalize, BinderProxy.finalize PlainSocketImpl.finalize90 +% ของพวกเขาเกิดขึ้นใน Android 4.3 เราได้รับรายงานเรื่องนี้จาก Crittercism จากผู้ใช้ในฟิลด์ ข้อผิดพลาดคือรูปแบบของ: " com.android.internal.BinderInternal$GcWatcher.finalize() timed out after 10 seconds" java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize() timed out after 10 seconds at android.os.BinderProxy.destroy(Native Method) at android.os.BinderProxy.finalize(Binder.java:459) at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:187) at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170) at java.lang.Thread.run(Thread.java:841) จนถึงตอนนี้เรายังไม่มีโชคในการทำซ้ำปัญหาในบ้านหรือหาสิ่งที่อาจทำให้เกิด ความคิดใดที่ทำให้เกิดสิ่งนี้ มีความคิดวิธีการแก้ไขข้อบกพร่องนี้และค้นหาว่าส่วนใดของแอพทำให้เกิดปัญหานี้ อะไรก็ตามที่ให้ความกระจ่างเกี่ยวกับปัญหาจะช่วยได้ Stacktraces เพิ่มเติม: 1 android.os.BinderProxy.destroy 2 android.os.BinderProxy.finalize Binder.java, line 482 3 …

24
เมื่อไหร่ที่จะยอมรับ GC.Collect
คำแนะนำทั่วไปคือคุณไม่ควรโทรGC.Collectจากรหัสของคุณ แต่มีข้อยกเว้นอะไรสำหรับกฎนี้ ฉันสามารถนึกถึงกรณีเฉพาะบางกรณีที่มันอาจสมเหตุสมผลในการบังคับให้เก็บขยะ ตัวอย่างหนึ่งที่ทำให้นึกถึงคือบริการที่ตื่นขึ้นมาเป็นระยะ ๆ ทำงานบางอย่างแล้วหลับเป็นเวลานาน ในกรณีนี้อาจเป็นความคิดที่ดีที่จะบังคับให้มีการรวบรวมเพื่อป้องกันไม่ให้กระบวนการที่ไม่ได้ใช้งานช้าจากการเก็บไว้ในหน่วยความจำมากกว่าที่จำเป็น มีกรณีอื่น ๆ ที่เป็นที่ยอมรับที่จะเรียกGC.Collect?

8
Java Garbage Collection ทำงานร่วมกับเอกสารอ้างอิงแบบวงกลมได้อย่างไร
จากความเข้าใจของฉันการเก็บขยะใน Java ล้างวัตถุบางอย่างถ้าไม่มีสิ่งใดที่ 'ชี้' ไปยังวัตถุนั้น คำถามของฉันคือจะเกิดอะไรขึ้นถ้าเรามีสิ่งนี้: class Node { public object value; public Node next; public Node(object o, Node n) { value = 0; next = n;} } //...some code { Node a = new Node("a", null), b = new Node("b", a), c = new Node("c", b); a.next = c; …

9
Stack, Static และ Heap ใน C ++
ฉันค้นหาแล้ว แต่ฉันไม่เข้าใจแนวคิดทั้งสามนี้เป็นอย่างดี ฉันต้องใช้การจัดสรรแบบไดนามิกเมื่อใด (ในฮีป) และประโยชน์ที่แท้จริงของมันคืออะไร ปัญหาของการเกิดไฟฟ้าสถิตย์และกองซ้อนคืออะไร? ฉันสามารถเขียนแอปพลิเคชันทั้งหมดโดยไม่จัดสรรตัวแปรในฮีปได้ไหม ฉันได้ยินมาว่าภาษาอื่น ๆ รวม "ผู้รวบรวมขยะ" ดังนั้นคุณไม่ต้องกังวลเกี่ยวกับความทรงจำ ที่เก็บขยะทำอะไร? คุณสามารถจัดการกับหน่วยความจำด้วยตัวเองได้อย่างไรโดยที่คุณไม่สามารถใช้ตัวเก็บขยะนี้ได้ เมื่อมีคนพูดกับฉันว่าด้วยการประกาศนี้: int * asafe=new int; ฉันมี "ตัวชี้ไปยังตัวชี้" มันหมายความว่าอะไร? มันแตกต่างจาก: asafe=new int; ?

6
การปิดไฟล์มีความสำคัญหรือไม่
ใน Python หากคุณเปิดไฟล์โดยไม่ต้องโทรclose()หรือปิดไฟล์ แต่ไม่ได้ใช้try- finallyหรือwithคำสั่ง "" นี่เป็นปัญหาหรือไม่ หรือว่าเป็นวิธีการเข้ารหัสที่เพียงพอที่จะใช้กับคอลเลกชัน Python เพื่อปิดไฟล์ทั้งหมดหรือไม่ ตัวอย่างเช่นหากทำสิ่งนี้: for line in open("filename"): # ... do stuff ... ... นี่เป็นปัญหาเนื่องจากไฟล์ไม่สามารถปิดได้และอาจมีข้อยกเว้นเกิดขึ้นซึ่งทำให้ไม่สามารถปิดไฟล์ได้ หรือมันจะปิดอย่างแน่นอนในตอนท้ายของforคำสั่งเพราะไฟล์ออกไปนอกขอบเขต?


8
การใช้ IDisposable อย่างถูกต้อง
ในชั้นเรียนของฉันฉันใช้ IDisposable ดังนี้ public class User : IDisposable { public int id { get; protected set; } public string name { get; protected set; } public string pass { get; protected set; } public User(int UserID) { id = UserID; } public User(string Username, string Password) { name = Username; …

7
คุณจะป้องกัน IDisposable จากการแพร่กระจายไปยังชั้นเรียนทั้งหมดของคุณได้อย่างไร
เริ่มด้วยคลาสที่เรียบง่ายเหล่านี้ ... สมมติว่าฉันมีชุดเรียนที่เรียบง่ายเช่นนี้: class Bus { Driver busDriver = new Driver(); } class Driver { Shoe[] shoes = { new Shoe(), new Shoe() }; } class Shoe { Shoelace lace = new Shoelace(); } class Shoelace { bool tied = false; } BusมีDriverที่DriverมีสองShoes แต่ละมีShoe Shoelaceทั้งหมดโง่มาก เพิ่มวัตถุ IDisposable ใน Shoelace ต่อมาฉันตัดสินใจว่าการดำเนินการบางอย่างเกี่ยวกับShoelaceอาจเป็นหลายเธรดดังนั้นฉันจึงเพิ่มEventWaitHandleสำหรับเธรดที่จะสื่อสารด้วย …

1
เอกสารรวบรวมขยะ Python [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันกำลังมองหาเอกสารที่อธิบายรายละเอียดว่าการเก็บขยะ python ทำงานอย่างไร ฉันสนใจว่าจะทำในขั้นตอนไหน มีวัตถุอะไรบ้างใน 3 คอลเลกชั่นนี้? ประเภทของวัตถุที่ถูกลบในแต่ละขั้นตอน? อัลกอริทึมใดที่ใช้ในการค้นหาวงจรอ้างอิง ความเป็นมา: ฉันกำลังดำเนินการค้นหาบางอย่างที่ต้องใช้เวลาเพียงเล็กน้อย เมื่อคนเก็บขยะเริ่มเก็บคนรุ่นเก่าที่สุดจะช้ากว่าในกรณีอื่น ๆ "มาก" ใช้เวลามากกว่าที่ตั้งใจไว้สำหรับการค้นหา ฉันกำลังหาวิธีทำนายว่าจะรวบรวมคนรุ่นเก่าที่สุดเมื่อใดและจะใช้เวลานานแค่ไหน มันเป็นเรื่องง่ายที่จะคาดการณ์เมื่อมันจะเก็บรุ่นที่เก่าแก่ที่สุดและget_count() ที่ยังสามารถจัดการกับget_threshold() set_threshold()แต่ฉันไม่เห็นว่าจะง่ายแค่ไหนที่จะตัดสินใจcollect()โดยการบังคับหรือรอการรวบรวมตามกำหนดการ

5
การลดเวลาหยุดการรวบรวมขยะในโปรแกรม Haskell
เรากำลังพัฒนาโปรแกรมที่รับและส่งต่อ "ข้อความ" ในขณะที่เก็บประวัติชั่วคราวของข้อความเหล่านั้นเพื่อให้สามารถบอกประวัติข้อความหากมีการร้องขอ ข้อความจะถูกระบุเป็นตัวเลขโดยทั่วไปจะมีขนาดประมาณ 1 กิโลไบต์และเราจำเป็นต้องเก็บรักษาข้อความเหล่านี้นับแสนรายการ เราต้องการเพิ่มประสิทธิภาพโปรแกรมนี้สำหรับเวลาแฝง: เวลาระหว่างการส่งและรับข้อความต้องน้อยกว่า 10 มิลลิวินาที โปรแกรมนี้เขียนใน Haskell และคอมไพล์ด้วย GHC อย่างไรก็ตามเราพบว่าการเก็บรวบรวมขยะหยุดชั่วคราวนานเกินไปสำหรับข้อกำหนดด้านเวลาแฝงของเรา: มากกว่า 100 มิลลิวินาทีในโปรแกรมจริงของเรา โปรแกรมต่อไปนี้เป็นเวอร์ชันที่เรียบง่ายของแอปพลิเคชันของเรา มันใช้Data.Map.Strictเพื่อเก็บข้อความ ข้อความจะถูกByteStrings Intระบุด้วย 1,000,000 ข้อความถูกแทรกในลำดับตัวเลขที่เพิ่มขึ้นและข้อความที่เก่าที่สุดจะถูกลบออกอย่างต่อเนื่องเพื่อเก็บประวัติไว้ที่สูงสุด 200,000 ข้อความ module Main (main) where import qualified Control.Exception as Exception import qualified Control.Monad as Monad import qualified Data.ByteString as ByteString import qualified Data.Map.Strict as Map …

3
Java GC (การจัดสรรล้มเหลว)
ทำไม "GC (การจัดสรรล้มเหลว)" เสมอ เซิร์ฟเวอร์ Java HotSpot (TM) 64- บิต VM (25.25-b02) สำหรับ linux-amd64 JRE ( 1.8.0_25 -b17), CommandLine flags: -XX:CMSInitiatingOccupancyFraction=60 -XX:GCLogFileSize=10485760 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=32212254720 -XX:MaxHeapSize=32212254720 -XX:NewRatio=10 -XX:OldPLABSize=16 -XX:ParallelGCThreads=4 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintStringTableStatistics -XX:+PrintTenuringDistribution -XX:StringTableSize=1000003 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=50 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC 27.329: [GC (Allocation Failure) 27.329: [ParNew Desired survivor size 44728320 …

4
วิธีข้ามป๊อปอัป“ Loose Object” เมื่อเรียกใช้ 'git gui'
เมื่อฉันเรียกใช้ 'git gui' ฉันจะได้รับป๊อปอัปที่ระบุว่า ปัจจุบันที่เก็บนี้มีวัตถุหลวม ๆ ประมาณ 1,500 ชิ้น จากนั้นแนะนำให้บีบอัดฐานข้อมูล ฉันเคยทำสิ่งนี้มาก่อนและมันจะลดวัตถุที่หลวมเหลือประมาณ 250 แต่นั่นไม่ได้ระงับป๊อปอัป การบีบอัดอีกครั้งไม่ได้เปลี่ยนจำนวนของวัตถุที่หลวม เวิร์กโฟลว์ปัจจุบันของเราต้องการการใช้ 'rebase' อย่างมากในขณะที่เรากำลังเปลี่ยนจาก Perforce และ Perforce ยังคงเป็น SCM ที่ยอมรับได้ เมื่อ Git เป็น SCM ที่ยอมรับได้แล้วเราจะทำการผสานอย่างสม่ำเสมอและปัญหาของวัตถุที่หลวมควรได้รับการบรรเทาลงอย่างมาก ในเวลานั้นฉันอยากจะให้ป๊อปอัป 'ประโยชน์' นี้หายไป

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