LogCat ของ Eclipse เต็มไปด้วย WAIT_FOR_CONCURRENT_GC กับ Android

ฉันกำลังเขียนเกม Android ขนาดเล็ก และเมื่อใดก็ตามที่ฉันรันครั้งแรก ทุกอย่างทำงานได้ดี แต่มันจะสุ่มหยุดและเริ่มส่งสแปมสิ่งนี้อย่างไม่มีที่สิ้นสุดใน LogCat ของ eclipse

12-30 12:40:05.344: D/dalvikvm(22831): WAIT_FOR_CONCURRENT_GC บล็อก 5ms 12-30 12:40:05.383: D/dalvikvm(22831): GC_CONCURRENT ปลดปล่อย 511K, ฟรี 34% 2374K/3552K, หยุดชั่วคราว 1ms+ 2ms รวม 14ms

ฉันรู้ว่ามันเกี่ยวข้องกับการเก็บขยะ แต่เมื่อใดก็ตามที่ฉันบังคับให้หยุดแอป (วิธีเดียวที่จะปิดได้) ฉันจะสูญเสีย RAM ที่มีอยู่ประมาณ 5-10mb จนกว่าฉันจะรีสตาร์ทอุปกรณ์ ไม่มีใครรู้ว่าสิ่งนี้หมายถึงอะไรและจะป้องกันได้อย่างไร?

อุปกรณ์ที่ฉันใช้คือ verizon galaxy nexus ที่ใช้ Android 4.2.1 (Cyanogenmod 10.1) และเวอร์ชัน sdk/target ที่ 3.2 (ระดับ api 13) ขอบคุณ!


person RetroZelda    schedule 30.12.2012    source แหล่งที่มา


คำตอบ (2)


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

การเขียนโปรแกรมเกมแตกต่างจากการเขียนโปรแกรมแอป 'ปกติ': เกมของคุณอาจจะวนซ้ำนับไม่ถ้วน ด้วยเหตุนี้แม้แต่หน่วยความจำรั่วเพียงเล็กน้อยก็สามารถเติบโตอย่างรวดเร็วจนกลายเป็นปัญหาที่แท้จริงได้

นอกจากนี้ GC ยังเป็นเพื่อนที่ยิ่งใหญ่ที่สุดของคุณโดยปกติ ในเกมมันเป็นหนึ่งในศัตรูของคุณ การดำเนินการ GC ทุกครั้งทำให้เกิดการหยุดชะงักเล็กน้อยเนื่องจาก 'หยุดโลก'

ฉันขอแนะนำให้คุณค้นหาบทช่วยสอนการเขียนโปรแกรมเกมที่เฉพาะเจาะจงต่อไป และวิธีการทำงานกับ GC ในบทช่วยสอนเหล่านั้น

person Stefan de Bruijn    schedule 30.12.2012
comment
ขอบคุณ เมื่อคุณชี้ให้เห็นลูปนับครั้งไม่ถ้วน มันทำให้ฉันรู้สึกว่าควรควบคุมการอัปเดตและเรนเดอร์อัตรารีเฟรชของเธรด - person RetroZelda; 08.01.2013

ไม่แน่ใจว่านี่คือสิ่งที่คุณกำลังมองหาหรือเปล่า แต่เป็นสิ่งแรกเมื่อฉันค้นหาข้อผิดพลาดของคุณ - WAIT_FOR_CONCURRENT_GC ถูกบล็อกหมายความว่าอย่างไร นอกจากนี้ ไม่มีเหตุผลใดๆ ที่จะ กำหนดเป้าหมาย 3.2

person snotyak    schedule 30.12.2012