เหตุใดแพลตฟอร์มโทรศัพท์มือถือจึงไม่สนับสนุนการรวบรวมขยะทั่วไป


11

ทั้ง Windows Phone / Xbox และ Android ขาดการสนับสนุนสำหรับการรวบรวมขยะทั่วไป นี่น่าผิดหวังสำหรับโปรแกรมเมอร์จำนวนมาก ดูเหมือนจะมีเหตุผลทางวิศวกรรมที่ถูกต้องตามกฎหมาย แต่ฉันไม่สามารถเข้าใจได้

โทรศัพท์ปัจจุบันมีหน่วยความจำเพิ่มขึ้นและอาจมี CPU ที่ดีกว่าเดสก์ท็อป / แล็ปท็อปที่ใช้. NET 1.1 กับ generational GC ย้อนกลับไปในปี 2544 และฉันไม่สามารถคิดได้ว่าเหตุผลใดที่โปรเซสเซอร์ ARM จะแย่กว่ารุ่นทั่วไป นอกจากนี้ยังมีความต้องการน้อยลงสำหรับการทำมัลติทาสก์บนโทรศัพท์และคอนโซลดังนั้นจึงมีพื้นที่ว่างมากขึ้น

แล้วอะไรล่ะ

แก้ไข:สองสามจุดเพื่อชี้แจง:

  • แพลตฟอร์มเหล่านี้ใช้การรวบรวมขยะสำหรับแอปโดยเฉพาะดังนั้นคำถามของฉันไม่เกี่ยวกับสาเหตุที่ GC ไม่รองรับ คำถามของฉันเกี่ยวกับสาเหตุที่generationalเก็บขยะไม่ได้
  • เหตุผลที่ผู้คนรู้สึกหงุดหงิดเกี่ยวกับการขาด GC generational นั่นคือ GC ที่ไม่ใช่เชิงพันธุกรรมนั้นไม่มีประสิทธิภาพอย่างมาก (นั่นหมายความว่าอายุการใช้งานแบตเตอรี่ไม่ใช่เหตุผล)
  • ฉันเชื่อว่ามีเหตุผลทางเทคนิคที่ซื่อสัตย์สำหรับการขาดการสนับสนุน GC generational นี่ไม่ใช่คำถามเชิงโวหาร

Windows phone (รุ่นปัจจุบัน) มีการรวบรวมขยะ มันจะทำงานเฉพาะเมื่ออุปกรณ์เหลือน้อยในหน่วยความจำmsdn.microsoft.com/en-us/library/gg490770.aspx
Tom Squires

@TomSquires GC บน WP7 รันหนึ่งครั้งทุก ๆ 1MB ของการจัดสรรจริง ๆ แล้ว ฉันคิดว่าคุณอาจกำลังคิดเกี่ยวกับตัวจัดการงานที่จัดการกระบวนการเก่า
Rei Miyasaka

คำตอบ:


5

ฉันคิดว่าปัญหาที่ใหญ่ที่สุดคือแบตเตอรี่ การรวบรวมขยะเป็นความสะดวกสบายของนักพัฒนาที่ซื้อในราคาซีพียูเพิ่มเติมในคอมพิวเตอร์ของผู้ใช้ เมื่อเสียบปลั๊ก CPU ของคุณ (เดสก์ท็อป) หรือมีแบตเตอรี่ขนาดใหญ่ (แล็ปท็อป) ผู้ใช้ของคุณยินดีจ่ายเพื่อความสะดวกของนักพัฒนามากขึ้นด้วยพลังงานเพิ่มเติมที่ CPU ใช้ในขณะที่ทำการรวบรวมขยะ เมื่อแบตเตอรี่มีขนาดค่อนข้างเล็กผู้ใช้อาจไม่ใจกว้าง พวกเขาอาจต้องการแถบเพิ่มเติมนั้นสำหรับตัวเอง - อาจจะคุยกับเพื่อน ๆ หรือฆ่าหมูพิเศษสักสองสามตัวในการเผชิญหน้ากับนกโกรธ

ไม่ว่าเหตุผลของผู้ใช้คืออะไรนักพัฒนาระบบปฏิบัติการไม่ต้องการสร้างความเข้าใจว่าอุปกรณ์ที่ใช้ระบบปฏิบัติการแบตเตอรี่หมดเร็วกว่าอุปกรณ์ที่ใช้ระบบปฏิบัติการของคู่แข่ง ดังนั้นพวกเขาจึงซื้อการรับรู้ที่ดีขึ้นเกี่ยวกับเวลาใช้งานแบตเตอรี่ที่คาดหวังไว้ในราคาที่ผู้ให้บริการสะดวกซื้อสำหรับพวกเขาความเจ็บปวดของคุณไม่ใช่เรื่องใหญ่ตราบใดที่ผู้ใช้มีความสุขกับอุปกรณ์


3
Generational GC นั้นมีประสิทธิภาพมากกว่าในกรณีส่วนใหญ่ดังนั้นคุณคิดว่าจะลดจำนวนรอบสัญญาณนาฬิกาลง มันยังไม่ได้อธิบายว่าทำไมบางอย่างเช่น Xbox ไม่มี generational GC เพราะ Xboxes ถูกเสียบเข้าด้วย
#

ดีว่าเป็นสิ่งที่ผมได้ยินในกองมากเกิน แต่ฉันไม่รู้เกี่ยวกับ XBox-es มาก
dasblinkenlight

3
ที่ยังไม่ตอบคำถาม แม้ว่าการรวบรวมขยะจะใช้พลังงานมากกว่าการจัดสรรที่ชัดเจน (ซึ่งเป็นที่ถกเถียงกันอย่างมาก - และฉันจะไม่เข้าไป) คำถามนี้ไม่ได้เกิดขึ้นเพราะเหตุใดการจัดสรรที่ชัดเจนจึงดีกว่า GC บนมือถือ แต่ถ้าไม่ใช่ generational GC ดีกว่า generational GC บนมือถือ
Rei Miyasaka

1
@Rei: โดยปกติแล้วเกมต้องการทุกสิ่งเพื่อกำหนด อย่างน้อยพวกเขาต้องการประสิทธิภาพที่คาดการณ์ได้ นาโนวินาทีสองสามตัวถูกทำลายที่นี่และบางส่วนของนาโนวินาทีที่สูญเสียไปในเวลาที่คาดเดาไม่ได้จะทำให้ประสบการณ์การเล่นเกมแย่ลง นักสะสมขยะทั่วไปไม่สามารถคาดการณ์ได้
Ant

2
@dobsobson ฉันไม่คิดว่ามันเป็นเรื่องจริง อย่างที่ฉันพูดในคำถามถ้ามันเป็นเพียงแพลตฟอร์มของ Microsoft ที่ละเลย GC ทั่วไปมันก็น่าจะเป็นเหตุผลด้านลอจิสติกส์ / ระบบราชการและฉันก็ไม่อยากถาม แต่ Android ก็มีปัญหาเดียวกันเช่นกันดังนั้นจึงอาจเป็นเหตุผลทางเทคนิคซึ่งหมายความว่าบางคนใน P.SE อาจมีคำตอบที่ชัดเจน
Rei Miyasaka

3

การคาดเดาที่ดีที่สุดของฉันคือว่ามันไม่ใช่เหตุผลทางเทคนิค แต่ผู้พัฒนาสำหรับแพลตฟอร์มโทรศัพท์เหล่านั้นก็ยังไม่ได้ใช้ความพยายาม ฉันรู้ว่ามันไม่ได้คำตอบที่คุณกำลังหวังให้ แต่ถ้าคุณได้ทำพัฒนาโทรศัพท์มือถือใด ๆ ที่คุณอาจจะได้สังเกตเห็นมีจำนวนมากของผลไม้แขวนต่ำ พวกเขาอาจไม่มีเวลาเขียนการใช้งาน GC หลายตัวปรับละเอียดทั้งหมดและเลือกอันที่ทำได้ดีที่สุด ทำไมทุกคนถึงใช้เวลาคิดค้นล้อใหม่เมื่อพวกเขาสามารถปล่อย API ใหม่ที่ฉูดฉาดและคิดไม่ดีออกมาได้ ;)

FWIW และเป็นการยืนยันทฤษฎีของฉันของ Android รันไทม์ใหม่ (ART) จะมี GC generationalและพวกเขากำลังวางแผนที่จะมี GC กระชับในอนาคต


2

มีค่าใช้จ่ายเพิ่มเติมในการรวบรวมขยะทั่วไป

ตัวสะสม generational จะต้องสามารถหาได้เมื่อวัตถุที่เก่ากว่าชี้ไปที่วัตถุที่ใหม่กว่า เราไม่สามารถติดตามผ่านวัตถุที่เก่ากว่าเพื่อค้นหากรณีเหล่านี้ได้เพราะนั่นจะทำให้จุดประสงค์ของการเก็บสะสมเป็นไปไม่ได้ แต่เราต้องการตรวจสอบเมื่อเกิดเหตุการณ์นี้ขึ้นและจดบันทึกสำหรับขั้นตอนการรวบรวม ไม่ว่าคุณจะทำเช่นนั้นจะเพิ่มค่าใช้จ่ายในกระบวนการรวบรวม

บนระบบเดสก์ท็อประบบปฏิบัติการของคุณกำลังทำสิ่งต่าง ๆ ทุกอย่างด้วยความทรงจำที่อยู่เบื้องหลัง มันสนับสนุนคุณสมบัติต่าง ๆ เช่นการแชร์เพจระหว่างกระบวนการการเขียนเพจที่ไม่ได้ใช้ไปยังดิสก์ให้การแมปหน่วยความจำระหว่างกระบวนการ ฯลฯ ความเข้าใจของฉันคือฟังก์ชั่นบางอย่างที่ใช้ที่นั่นทำให้สามารถติดตามตัวชี้ได้อย่างมีประสิทธิภาพมากขึ้น การดำเนินการกำลังกังวลเกี่ยวกับสิ่งที่คุณกำลังเปลี่ยนแปลงในหน่วยความจำดังนั้นการใช้ข้อมูลนั้นเพื่อจุดประสงค์ใหม่ไม่ใช่ปัญหา

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


การใช้ประโยชน์สูงสุดจากรุ่น GC ต้องใช้การเขียนรั้วเพื่อตรวจสอบเมื่อเขียนวัตถุรุ่นเก่า ในทางกลับกันแม้ว่าส่วน "เครื่องหมาย" ของ GC ไม่สามารถได้รับประโยชน์จากรุ่น แต่ฉันคิดว่าจะยังคงสามารถปรับปรุงประสิทธิภาพโดยการย้ายสิ่งต่าง ๆ ในรุ่นที่ใหม่กว่าเท่านั้น เช่นเดียวกับที่ใหม่กว่าอาจเป็นประโยชน์หากอนุญาตให้หนึ่งทราบจำนวนหน่วยความจำที่เรียกคืนได้ในแต่ละรุ่น)
supercat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.