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

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

2
จำเป็นต้องลบตัวจัดการเหตุการณ์ใน C # อย่างชัดเจนหรือไม่
ฉันมีชั้นเรียนที่เสนอกิจกรรมบางอย่าง คลาสนั้นได้รับการประกาศทั่วโลก แต่ไม่รวมอยู่ในการประกาศระดับโลกนั้น - มันได้รับการติดตั้งบนพื้นฐานที่จำเป็นในวิธีการที่จำเป็น แต่ละครั้งที่จำเป็นต้องใช้คลาสนั้นในเมธอดคลาสนั้นจะถูกอินสแตนซ์และตัวจัดการเหตุการณ์จะถูกลงทะเบียน จำเป็นหรือไม่ที่จะต้องลบตัวจัดการเหตุการณ์อย่างชัดเจนก่อนที่เมธอดจะอยู่นอกขอบเขต เมื่อเมธอดอยู่นอกขอบเขตอินสแตนซ์ของคลาสก็เช่นกัน การออกจากตัวจัดการเหตุการณ์ที่ลงทะเบียนกับอินสแตนซ์ที่กำลังจะอยู่นอกขอบเขตนั้นมีผลกระทบต่อหน่วยความจำหรือไม่ (ฉันสงสัยว่าตัวจัดการเหตุการณ์จะป้องกันไม่ให้ GC เห็นอินสแตนซ์ของคลาสที่ไม่มีการอ้างอิงอีกต่อไป)

8
Haskell ต้องการคนเก็บขยะหรือไม่?
ฉันสงสัยว่าทำไมการใช้งาน Haskell จึงใช้ GC ฉันไม่สามารถนึกถึงกรณีที่ GC จำเป็นในภาษาที่บริสุทธิ์ เป็นเพียงการเพิ่มประสิทธิภาพเพื่อลดการคัดลอกหรือจำเป็นจริง ๆ ? ฉันกำลังมองหาโค้ดตัวอย่างที่อาจรั่วไหลหากไม่มี GC

15
แนวทางปฏิบัติที่ดีที่สุดในการบังคับเก็บขยะใน C #
จากประสบการณ์ของฉันดูเหมือนว่าคนส่วนใหญ่จะบอกคุณว่าไม่ฉลาดที่จะบังคับเก็บขยะ แต่ในบางกรณีที่คุณกำลังทำงานกับวัตถุขนาดใหญ่ที่ไม่ได้รับการรวบรวมในรุ่น 0 เสมอไป แต่ที่หน่วยความจำเป็นปัญหาคือ ตกลงที่จะบังคับรวบรวม? มีแนวทางปฏิบัติที่ดีที่สุดสำหรับการทำเช่นนั้นหรือไม่?

16
System.gc () ทำอะไรเมื่อไหร่
ฉันรู้ว่าการรวบรวมขยะเป็นแบบอัตโนมัติใน Java แต่ฉันเข้าใจว่าถ้าคุณเรียกSystem.gc()รหัสของคุณว่า JVM อาจตัดสินใจหรือไม่ดำเนินการเก็บขยะ ณ จุดนั้น วิธีนี้ทำงานได้อย่างแม่นยำ? สิ่งที่ตาม / พารามิเตอร์ที่ไม่ตรง JVM ที่ตัดสินใจที่จะทำ (หรือไม่ทำ) GC เมื่อมันเห็นSystem.gc()? มีตัวอย่างใดบ้างที่ควรใส่ในโค้ดของคุณในกรณีนี้

6
การตั้งค่าออบเจ็กต์ Java เป็น null จะทำอะไรอีกต่อไปหรือไม่?
ฉันกำลังดูหนังสือเก่า ๆ และพบสำเนา "Practical Java" ของ Peter Hagger ในส่วนประสิทธิภาพมีคำแนะนำในการตั้งค่าการอ้างอิงอ็อบเจ็กต์nullเมื่อไม่จำเป็นอีกต่อไป ใน Java การตั้งค่าการอ้างอิงอ็อบเจ็กต์เพื่อnullปรับปรุงประสิทธิภาพหรือประสิทธิภาพการรวบรวมขยะหรือไม่ ถ้าเป็นเช่นนั้นปัญหานี้เกิดขึ้นในกรณีใด คลาสคอนเทนเนอร์? องค์ประกอบของวัตถุ? ชั้นในนิรนาม? ฉันเห็นสิ่งนี้ในโค้ดบ่อยๆ ตอนนี้คำแนะนำการเขียนโปรแกรมล้าสมัยแล้วหรือยังมีประโยชน์หรือไม่?

5
Go ใช้ Garbage Collection แบบไหน?
Go เป็นภาษาที่เก็บขยะ: http://golang.org/doc/go_faq.html#garbage_collection ที่นี่บอกว่าเป็นเครื่องเก็บขยะแบบมาร์คและกวาด แต่ไม่ได้เจาะลึกรายละเอียดและมีการแทนที่อยู่ในผลงาน ... แต่ย่อหน้านี้ดูเหมือนจะไม่ได้รับการอัปเดตมากนักนับตั้งแต่ Go เปิดตัว มันยังคงทำเครื่องหมายและกวาด? หัวโบราณหรือเป๊ะ? เป็นรุ่น?

11
การทำความเข้าใจความหมายของคำศัพท์และแนวคิด - RAII (Resource Acquisition is Initialization)
คุณช่วยนักพัฒนา C ++ ช่วยให้คำอธิบายที่ดีแก่เราได้ไหมว่า RAII คืออะไรทำไมจึงสำคัญและอาจมีความเกี่ยวข้องกับภาษาอื่นหรือไม่ ผมทำรู้นิด ๆ หน่อย ๆ ฉันเชื่อว่าย่อมาจาก "Resource Acquisition is Initialization" อย่างไรก็ตามชื่อนั้นไม่ได้ทำให้สับสนกับความเข้าใจ (อาจไม่ถูกต้อง) ของฉันเกี่ยวกับสิ่งที่ RAII คือ: ฉันรู้สึกว่า RAII เป็นวิธีเริ่มต้นวัตถุบนสแต็กดังนั้นเมื่อตัวแปรเหล่านั้นออกไปนอกขอบเขตผู้ทำลายจะโดยอัตโนมัติ เรียกว่าทำให้ทรัพยากรถูกล้าง เหตุใดจึงไม่เรียกว่า "ใช้สแต็กเพื่อทริกเกอร์การล้างข้อมูล" (UTSTTC :)? คุณจะเดินทางจากที่นั่นไปยัง "RAII" ได้อย่างไร? และคุณจะสร้างบางสิ่งบนสแต็กที่จะทำให้เกิดการล้างบางสิ่งที่อาศัยอยู่บนฮีปได้อย่างไร? นอกจากนี้ยังมีกรณีที่คุณไม่สามารถใช้ RAII ได้หรือไม่? คุณเคยคิดว่าตัวเองอยากเก็บขยะไหม? อย่างน้อยคนเก็บขยะที่คุณสามารถใช้สำหรับวัตถุบางอย่างในขณะที่ปล่อยให้คนอื่นจัดการ? ขอบคุณ.

13
แนวทางปฏิบัติที่ดีที่สุดในการสร้างวัตถุชั่วคราวขนาดเล็กหลายล้านชิ้น
"แนวทางปฏิบัติที่ดีที่สุด" สำหรับการสร้าง (และปล่อย) วัตถุขนาดเล็กหลายล้านชิ้นคืออะไร ฉันกำลังเขียนโปรแกรมหมากรุกใน Java และอัลกอริธึมการค้นหาสร้างวัตถุ "ย้าย" หนึ่งรายการสำหรับการเคลื่อนไหวที่เป็นไปได้แต่ละครั้งและการค้นหาเพียงเล็กน้อยสามารถสร้างวัตถุที่เคลื่อนไหวได้มากกว่าล้านชิ้นต่อวินาที JVM GC สามารถจัดการกับภาระในระบบการพัฒนาของฉันได้ แต่ฉันสนใจที่จะสำรวจแนวทางอื่นที่จะ: ลดค่าใช้จ่ายในการจัดเก็บขยะและ ลดการใช้หน่วยความจำสูงสุดสำหรับระบบระดับล่าง วัตถุส่วนใหญ่มีอายุการใช้งานสั้นมาก แต่ประมาณ 1% ของการเคลื่อนไหวที่สร้างขึ้นจะยังคงอยู่และส่งคืนเป็นค่าที่คงอยู่ดังนั้นเทคนิคการรวมหรือการแคชใด ๆ จะต้องให้ความสามารถในการแยกวัตถุบางอย่างออกจากการใช้ซ้ำ . ฉันไม่ได้คาดหวังโค้ดตัวอย่างที่สมบูรณ์ แต่ฉันขอขอบคุณสำหรับคำแนะนำสำหรับการอ่าน / การค้นคว้าเพิ่มเติมหรือตัวอย่างโอเพนซอร์สที่มีลักษณะคล้ายกัน

11
เครื่องเก็บขยะใน Android
ฉันได้เห็นคำตอบของ Android มากมายที่แนะนำให้โทรหาคนเก็บขยะในบางสถานการณ์ เป็นแนวทางปฏิบัติที่ดีในการขอตัวเก็บขยะใน Android ก่อนดำเนินการด้วยความจำเสื่อมหรือไม่? ถ้าไม่ฉันควรโทรหาก็ต่อเมื่อได้รับOutOfMemoryข้อผิดพลาด? มีสิ่งอื่นใดบ้างที่ฉันควรใช้ก่อนหันไปหาคนเก็บขยะ?

5
ทำไมต้องมี Large Object Heap และทำไมเราถึงสนใจ?
ฉันได้อ่านเกี่ยวกับ Generations และ Large object heap แต่ฉันยังไม่เข้าใจว่าความสำคัญ (หรือประโยชน์) ของการมีกองวัตถุขนาดใหญ่คืออะไร? อาจมีอะไรผิดพลาด (ในแง่ของประสิทธิภาพหรือหน่วยความจำ) หาก CLR เพิ่งใช้รุ่นที่ 2 (พิจารณาว่าเกณฑ์สำหรับ Gen0 และ Gen1 มีขนาดเล็กสำหรับจัดการวัตถุขนาดใหญ่) สำหรับการจัดเก็บวัตถุขนาดใหญ่

9
คุณบังคับให้เก็บขยะจากเชลล์ได้อย่างไร?
ดังนั้นฉันกำลังดูฮีปที่มี jmap บนกล่องระยะไกลและฉันต้องการบังคับให้รวบรวมขยะในนั้น คุณจะทำอย่างไรโดยไม่ต้องเข้าไปใน jvisualvm หรือ jconsole และเพื่อน ๆ ? ฉันรู้ว่าคุณไม่ควรบังคับให้เก็บขยะ - คุณควรหาสาเหตุว่าทำไมกองถึงใหญ่ / โต ฉันยังตระหนักดีว่า System.GC () ไม่ได้บังคับให้เก็บขยะจริง ๆ - เพียงแค่บอก GC ว่าคุณต้องการให้เกิดขึ้น ต้องบอกว่ามีวิธีทำง่ายๆนี้หรือไม่? แอพบรรทัดคำสั่งบางอย่างฉันหายไป?

16
คนเก็บขยะใน Java คืออะไร?
ฉันยังใหม่กับ Java และสับสนเกี่ยวกับตัวเก็บขยะใน Java มันทำอะไรได้จริงและจะเกิดขึ้นเมื่อไหร่ โปรดอธิบายคุณสมบัติบางประการของตัวรวบรวมขยะใน Java

20
มีอะไรผิดปกติเกี่ยวกับการใช้ GC.Collect ()?
แม้ว่าฉันจะเข้าใจถึงผลกระทบที่ร้ายแรงของการเล่นกับฟังก์ชันนี้ (หรืออย่างน้อยก็คือสิ่งที่ฉันคิด) แต่ฉันก็ไม่เข้าใจว่าทำไมมันถึงกลายเป็นหนึ่งในสิ่งเหล่านี้ที่โปรแกรมเมอร์ผู้มีหน้ามีตาไม่เคยใช้แม้แต่คนที่ไม่รู้ด้วยซ้ำ มีไว้ทำอะไร. สมมติว่าฉันกำลังพัฒนาแอปพลิเคชันที่การใช้งานหน่วยความจำแตกต่างกันมากขึ้นอยู่กับสิ่งที่ผู้ใช้ทำ วงจรชีวิตของแอปพลิเคชันสามารถแบ่งออกเป็นสองขั้นตอนหลัก: การแก้ไขและการประมวลผลแบบเรียลไทม์ ในระหว่างขั้นตอนการแก้ไขสมมติว่ามีการสร้างวัตถุหลายพันล้านหรือหลายล้านล้านชิ้น บางคนมีขนาดเล็กและบางคนไม่มีบางคนอาจมีเข้ารอบสุดท้ายและบางคนอาจไม่มีและสมมติว่าช่วงชีวิตของพวกเขาแตกต่างกันไปตั้งแต่ไม่กี่มิลลิวินาทีไปจนถึงชั่วโมงที่ยาวนาน จากนั้นผู้ใช้จะตัดสินใจเปลี่ยนไปใช้ขั้นตอนแบบเรียลไทม์ ณ จุดนี้สมมติว่าประสิทธิภาพมีบทบาทพื้นฐานและการเปลี่ยนแปลงขั้นตอนของโปรแกรมเพียงเล็กน้อยอาจนำมาซึ่งผลที่ตามมาอย่างหายนะ การสร้างออบเจ็กต์จะลดลงเหลือน้อยที่สุดเท่าที่จะเป็นไปได้โดยใช้พูลอ็อบเจ็กต์และจากนั้น GC จะส่งเสียงกังวานโดยไม่คาดคิดและโยนมันออกไปทั้งหมดและมีคนตาย คำถาม: ในกรณีนี้ไม่ควรเรียก GC.Collect () ก่อนเข้าสู่ขั้นตอนที่สองหรือไม่? ท้ายที่สุดทั้งสองขั้นตอนนี้ไม่เคยเหลื่อมเวลาซึ่งกันและกันและการเพิ่มประสิทธิภาพและสถิติทั้งหมดที่ GC รวบรวมได้จะมีประโยชน์เพียงเล็กน้อยที่นี่ ... หมายเหตุ: ดังที่คุณบางคนได้ชี้ให้เห็นว่า. NET อาจไม่ใช่แพลตฟอร์มที่ดีที่สุดสำหรับแอปพลิเคชันเช่นนี้ แต่อยู่นอกเหนือขอบเขตของคำถามนี้ มีวัตถุประสงค์เพื่อชี้แจงว่าการเรียก GC.Collect () สามารถปรับปรุงพฤติกรรม / ประสิทธิภาพโดยรวมของแอปพลิเคชันได้หรือไม่ เราทุกคนยอมรับว่าสถานการณ์ที่คุณจะทำสิ่งนั้นหายากมาก แต่แล้วอีกครั้ง GC พยายามที่จะคาดเดาและทำได้ดีเกือบตลอดเวลา แต่ก็ยังเกี่ยวกับการคาดเดา ขอบคุณ.

3
คนเก็บขยะหลีกเลี่ยงการวนซ้ำที่ไม่สิ้นสุดที่นี่ได้อย่างไร?
พิจารณาโปรแกรม C # ต่อไปนี้ฉันส่งไปที่ codegolf เพื่อเป็นคำตอบในการสร้างลูปโดยไม่ต้องวนซ้ำ: class P{ static int x=0; ~P(){ System.Console.WriteLine(++x); new P(); } static void Main(){ new P(); } } โปรแกรมนี้ดูเหมือนการวนซ้ำที่ไม่มีที่สิ้นสุดในการตรวจสอบของฉัน แต่ดูเหมือนว่าจะทำงานซ้ำหลายพันครั้งจากนั้นโปรแกรมจะสิ้นสุดลงโดยไม่มีข้อผิดพลาด (ไม่มีข้อผิดพลาดเกิดขึ้น) เป็นการละเมิดข้อกำหนดที่ผู้สรุปPในที่สุดจะไม่เรียกหรือไม่ เห็นได้ชัดว่านี่เป็นรหัสโง่ ๆ ที่ไม่ควรปรากฏ แต่ฉันอยากรู้ว่าโปรแกรมจะทำสำเร็จได้อย่างไร โพสต์รหัสเดิมกอล์ฟ :: /codegolf/33196/loop-without-looping/33218#33218

3
ข้อความบันทึก Java Garbage Collection
ฉันได้กำหนดค่า java ให้ทิ้งข้อมูลการรวบรวมขยะลงในบันทึก ( verbose GC ) ฉันไม่แน่ใจว่ารายการรวบรวมขยะในบันทึกหมายถึงอะไร ตัวอย่างของรายการเหล่านี้แสดงไว้ด้านล่าง ฉันค้นหาในGoogleและไม่พบคำอธิบายที่ชัดเจน ฉันมีการคาดเดาที่สมเหตุสมผล แต่ฉันกำลังมองหาคำตอบที่ให้คำจำกัดความที่เข้มงวดว่าตัวเลขในรายการหมายถึงอะไรซึ่งได้รับการสนับสนุนโดยแหล่งข้อมูลที่น่าเชื่อถือ +1 อัตโนมัติสำหรับคำตอบทั้งหมดซึ่งอ้างถึงเอกสารเกี่ยวกับดวงอาทิตย์ คำถามของฉันคือ: PSYoungGen หมายถึงอะไร? ฉันคิดว่ามันมีส่วนเกี่ยวข้องกับคนรุ่นก่อน (อายุน้อยกว่า) แต่อะไรกันแน่? อะไรคือความแตกต่างระหว่างเลขสามตัวที่สองกับตัวแรก? เหตุใดจึงมีการระบุชื่อ (PSYoungGen) สำหรับตัวเลขสามตัวแรก แต่ไม่ใช่ตัวที่สอง ตัวเลขแต่ละตัว (ขนาดหน่วยความจำ) ในทริปเปิ้ลหมายถึงอะไร ตัวอย่างเช่นใน 109884K-> 14201K (139904K) คือหน่วยความจำก่อน GC 109884k จากนั้นจะลดลงเหลือ 14201K เลขสามเกี่ยวข้องกันอย่างไร? ทำไมเราต้องใช้ตัวเลขชุดที่สอง 8109.128: [GC [PSYoungGen: 109884K-> 14201K (139904K)] 691015K-> 595332K (1119040K), 0.0454530 วินาที] …

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