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

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

19
การใช้อินเตอร์เฟส IDisposable อย่างเหมาะสม
ฉันรู้จากการอ่านเอกสารของ Microsoftว่าการใช้IDisposableอินเทอร์เฟซหลักคือการล้างทรัพยากรที่ไม่มีการจัดการ สำหรับฉัน "ไม่มีการจัดการ" หมายถึงสิ่งต่าง ๆ เช่นการเชื่อมต่อฐานข้อมูลซ็อกเก็ตที่จับหน้าต่าง ฯลฯ แต่ฉันเห็นรหัสที่ใช้Dispose()วิธีการกับทรัพยากรที่มีการจัดการฟรีซึ่งดูเหมือนว่าซ้ำซ้อนกับฉันเนื่องจากตัวเก็บขยะควรดูแล สำหรับคุณ ตัวอย่างเช่น: public class MyCollection : IDisposable { private List<String> _theList = new List<String>(); private Dictionary<String, Point> _theDict = new Dictionary<String, Point>(); // Die, clear it up! (free unmanaged resources) public void Dispose() { _theList.clear(); _theDict.clear(); _theList = null; _theDict = …


20
เกิดข้อผิดพลาด java.lang.OutOfMemoryError: เกินขีด จำกัด ค่าโสหุ้ย GC
ฉันได้รับข้อความแสดงข้อผิดพลาดขณะที่ฉันทำการทดสอบ JUnit: java.lang.OutOfMemoryError: GC overhead limit exceeded ฉันรู้ว่าอะไรOutOfMemoryErrorคือ แต่ขีด จำกัด ค่าใช้จ่ายของ GC หมายถึงอะไร ฉันจะแก้ปัญหานี้ได้อย่างไร

21
มี destructor สำหรับ Java หรือไม่?
มี destructor สำหรับ Java หรือไม่? ฉันดูเหมือนจะไม่สามารถค้นหาเอกสารใด ๆ เกี่ยวกับเรื่องนี้ หากไม่มีฉันจะบรรลุผลเช่นเดียวกันได้อย่างไร เพื่อให้คำถามของฉันเฉพาะเจาะจงมากขึ้นฉันกำลังเขียนแอปพลิเคชันที่เกี่ยวข้องกับข้อมูลและข้อกำหนดระบุว่าควรมีปุ่ม 'รีเซ็ต' ที่ทำให้แอปพลิเคชันกลับสู่สถานะเดิมที่เพิ่งเปิดตัว อย่างไรก็ตามข้อมูลทั้งหมดจะต้องเป็น 'สด' เว้นแต่ว่าแอปพลิเคชันจะปิดหรือกดปุ่มรีเซ็ต การเป็นโปรแกรมเมอร์ C / C ++ ฉันคิดว่านี่น่าจะเป็นเรื่องง่าย (และด้วยเหตุนี้ฉันวางแผนที่จะใช้มันครั้งสุดท้าย) ฉันจัดโครงสร้างโปรแกรมของฉันเพื่อให้วัตถุ 'ที่สามารถรีเซ็ตได้' ทั้งหมดจะอยู่ในระดับเดียวกันเพื่อที่ฉันจะสามารถทำลายวัตถุ 'สด' ทั้งหมดเมื่อกดปุ่มรีเซ็ต ฉันคิดว่าถ้าทั้งหมดที่ฉันทำคือเพียงการตรวจสอบข้อมูลและรอให้ตัวรวบรวมขยะเก็บพวกเขาจะไม่มีหน่วยความจำรั่วถ้าผู้ใช้ของฉันป้อนข้อมูลซ้ำแล้วกดปุ่มรีเซ็ตหรือไม่ ฉันคิดเช่นกันเนื่องจาก Java ค่อนข้างเป็นภาษาที่ควรมีวิธีป้องกันไม่ให้เกิดขึ้นหรือแก้ไขปัญหานี้อย่างสง่างาม

8
อยู่ที่ไหน Machine.Config?
ฉันต้องการใช้การเปลี่ยนแปลงเพื่อให้ฉันสามารถใช้การตั้งค่าเซิร์ฟเวอร์ GC สำหรับแอป C # 3.5 ของฉัน - ฉันสามารถทำได้โดยแก้ไขmachine.configไฟล์ ปัญหาเดียวคือฉันไม่รู้ว่าอยู่ที่ไหน ฉันจะค้นหาพา ธ ของไฟล์นี้ด้วยวิธีการทำซ้ำในเครื่องต่าง ๆ จำนวนหนึ่งได้อย่างไร

11
การลบวัตถุใน JavaScript
ฉันสับสนกับdeleteโอเปอเรเตอร์ของ JavaScript รับรหัสต่อไปนี้: var obj = { helloText: "Hello World!" }; var foo = obj; delete obj; หลังจากชิ้นส่วนของรหัสนี้ได้รับการดำเนินการobjเป็นnullแต่ยังหมายถึงวัตถุที่ว่าเหมือนfoo objฉันเดาว่าวัตถุนี้เป็นวัตถุเดียวกับที่fooชี้ไป สับสนนี้เราเพราะเราคาดว่าการเขียนที่delete objถูกลบวัตถุที่ถูกชี้ไปในหน่วยความจำที่ไม่ได้เป็นเพียงตัวแปรobjobj นี่เป็นเพราะ Garbage Collector ของจาวาสคริปต์ทำงานบนการรักษา / ปล่อยดังนั้นถ้าฉันไม่มีตัวแปรอื่น ๆ ที่ชี้ไปที่วัตถุมันจะถูกลบออกจากหน่วยความจำ? (โดยวิธีการทดสอบของฉันเสร็จใน Safari 4)

17
เมื่อไหร่จะทำการ finalize () วิธีการใน Java?
ฉันจำเป็นต้องทราบเมื่อมีการใช้วิธีการที่เรียกว่าในfinalize() JVMฉันสร้างคลาสทดสอบซึ่งเขียนลงในไฟล์เมื่อมีfinalize()การเรียกเมธอดโดยลบล้างมัน มันไม่ได้ดำเนินการ ใครช่วยบอกฉันได้ว่าทำไมมันถึงไม่ทำงาน?

12
ทำไมการโทรถึง System.gc () จึงเป็นเรื่องไม่ถูกต้อง
หลังจากตอบคำถามเกี่ยวกับวิธีบังคับวัตถุฟรีใน Java (ชายคนนั้นกำลังล้าง HashMap 1.5GB) ด้วยSystem.gc()ฉันได้รับการบอกว่ามันเป็นวิธีปฏิบัติที่ไม่ถูกต้องในการโทรSystem.gc()ด้วยตนเอง แต่ความคิดเห็นนั้นไม่น่าเชื่อถืออย่างสิ้นเชิง นอกจากนี้ดูเหมือนว่าไม่มีใครกล้าที่จะลุกขึ้นสู้หรือถอนคำตอบของฉัน ฉันได้รับการบอกกล่าวว่ามีการปฏิบัติที่ไม่ดี แต่จากนั้นฉันก็บอกด้วยว่าการทำงานของตัวรวบรวมขยะไม่ได้หยุดโลกอย่างเป็นระบบอีกต่อไปและ JVM สามารถใช้งานได้อย่างมีประสิทธิภาพเพื่อเป็นเพียงคำใบ้เท่านั้น ที่สูญเสีย ฉันเข้าใจว่า JVM มักจะรู้ดีกว่าคุณเมื่อจำเป็นต้องเรียกคืนหน่วยความจำ ฉันยังเข้าใจด้วยว่าการกังวลเกี่ยวกับข้อมูลไม่กี่กิโลไบต์นั้นเป็นเรื่องโง่ ฉันยังเข้าใจว่าแม้กระทั่งเมกะไบต์ของข้อมูลก็ไม่ได้เป็นเช่นนั้นเมื่อสองสามปีก่อน แต่ถึงกระนั้น 1.5 กิกะไบต์ และคุณรู้ว่ามีข้อมูลประมาณ 1.5 GB ในหน่วยความจำ มันไม่เหมือนกับการถ่ายในที่มืด เป็นSystem.gc()ระบบที่ไม่ดีหรือมีบางจุดที่จะไม่เป็นไร? ดังนั้นคำถามคือสองเท่าจริง: เป็นเพราะเหตุใดหรือไม่ได้ปฏิบัติไม่ดีต่อการเรียกร้องSystem.gc()? จริง ๆ แล้วมันเป็นเพียงคำใบ้ของ JVM ภายใต้การนำไปใช้บางอย่างหรือเป็นวงจรการรวบรวมเต็มเสมอหรือไม่? มีการใช้งานตัวเก็บรวบรวมขยะที่สามารถทำงานได้โดยไม่หยุดโลกหรือไม่? กรุณาหลั่งน้ำตาแสงบางกว่ายืนยันต่าง ๆ คนได้ทำในการแสดงความคิดเห็นของฉันคำตอบ เกณฑ์อยู่ที่ไหน มันเป็นสิ่งที่ไม่เคยมีความคิดที่ดีที่จะโทรSystem.gc()หรือจะมีบางครั้งที่มันเป็นที่ยอมรับ? ถ้าเป็นเช่นนั้นเวลาเหล่านั้นคืออะไร?

5
คำศัพท์ภาษาฮีป Java: คนรุ่นเก่าและรุ่นถาวร
ฉันพยายามที่จะเข้าใจในสิ่งที่แนวความคิดของหนุ่มสาว , เก่าและถาวรชั่วอายุอยู่ในคำศัพท์กอง Java และมากขึ้นโดยเฉพาะการมีปฏิสัมพันธ์ระหว่างสามชั่วอายุคน คำถามของฉันคือ: คนรุ่นใหม่คืออะไร? คนรุ่นเก่าคืออะไร? รุ่นถาวรคืออะไร คนสามชั่วอายุโต้ตอบกันและเกี่ยวข้องกันอย่างไร




16
เหตุใด C ++ จึงไม่มีตัวรวบรวมขยะ
ฉันไม่ได้ถามคำถามนี้เพราะข้อดีของการเก็บขยะก่อนอื่น เหตุผลหลักของฉันในการถามนี้คือฉันรู้ว่า Bjarne Stroustrup บอกว่า C ++ จะมีตัวรวบรวมขยะในบางเวลา พร้อมที่กล่าวว่าทำไมมันไม่ได้ถูกเพิ่มเข้ามา? มีนักสะสมขยะสำหรับ C ++ อยู่แล้ว นี่เป็นเพียงหนึ่งในประเภทที่ "พูดง่ายกว่าทำ" หรือมีเหตุผลอื่น ๆ ที่ยังไม่ถูกเพิ่ม (และจะไม่ถูกเพิ่มใน C ++ 11)? ลิงก์ข้าม: ตัวรวบรวมขยะสำหรับ C ++ เพื่อชี้แจงฉันเข้าใจเหตุผลที่ C ++ ไม่มีตัวรวบรวมขยะเมื่อสร้างครั้งแรก ฉันสงสัยว่าทำไมไม่สามารถเพิ่มนักสะสม

22
จะบังคับให้รวบรวมขยะใน Java ได้อย่างไร
เป็นไปได้ไหมที่จะบังคับให้มีการรวบรวมขยะใน Java แม้ว่ามันจะยุ่งยากหรือไม่ ฉันรู้System.gc();และRuntime.gc();พวกเขาแนะนำให้ทำ GC เท่านั้น ฉันจะบังคับ GC ได้อย่างไร

6
กลไกการนับการอ้างอิงอัตโนมัติใหม่ทำงานอย่างไร
บางคนสามารถอธิบายสั้น ๆ ว่า ARC ทำงานอย่างไร ฉันรู้ว่ามันแตกต่างจาก Garbage Collection แต่ฉันแค่สงสัยว่ามันทำงานอย่างไร นอกจากนี้หาก ARC ทำในสิ่งที่ GC ทำโดยไม่มีการขัดขวางประสิทธิภาพแล้วเหตุใด Java จึงใช้ GC ทำไมมันไม่ใช้ ARC เช่นกัน?

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