keyword: real-time java, memory management, memory area, immortal memory, scoped memory, heap.
ถาม ทำไมใน RTSJ ถึงได้กำหนด API สำหรับจัดการเม็ม ?
ตอบ เพราะไม่อยากให้เกิดการขัดจังหวะโดยGCในขณะที่รัน time-critical thread. ถึงแม้เราจะให้ตัว time-critical thread นี้มีpriorityสูงกว่าthreadอื่นๆ มันก็อาจจะถูกหน่วงไม่ให้รันได้อยู่ดี ลองพิจารณา low priority thread รันแล้วใช้ฮีปหมด GCเข้ามาเก็บกวาด ครึ่งๆกลางๆ แล้วเจ้า time-critical thread ซึ่งอาจจะเป็นperiodicก็ถึงเวลารัน ถ้ามันรันในขณะที่ GC ยังเก็บกวาดไม่เสร็จ ก็อาจจะทำให้มันเข้าไปอ้างถึงเม็มที่ยังเละเทะอยู่ (ชัดๆว่าเป็นพฤติกรรมที่ไม่เป็นน่าปรารถนา) ทันจึงถูกหน่วงให้รอ.
ด้วยเหตุฉะนี้ RTSJ จึงได้กำหนดให้มี memory area ซึ่งไม่ใช่ heap ได้แก่ immortal กับ scoped มา เพื่อให้แอพพลิเคชั่นไม่ถูกGC เข้ามารบกวน
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น