กระบวนการ zygote ยังคงทำใน Android L คืออะไร?


13

ฉันพยายามหาความแตกต่างที่เฉพาะเจาะจงในรันไทม์ของ Dalvik และ ART ฉันรู้ว่า ART ไม่ได้ใช้ Dalvik VM อีกต่อไปอย่างไรก็ตามหนึ่งในสิ่งแรกที่ฉันสังเกตเห็นหลังจากติดตั้ง Android L Preview คือกระบวนการ zygote ยังคงทำงานอยู่ หากพวกเขากำจัด Dalvik VM ออกไปอย่างแท้จริงนั่นจะไม่ทำให้กระบวนการไซโกตไร้ประโยชน์หรือไม่? นอกจากนี้เมื่อตรวจสอบซอร์สโค้ดที่เผยแพร่ผ่าน AOSP นั้น Dalvik ส่วนใหญ่ยังคงอยู่


1
เป็นการยากที่จะทราบว่านี่เป็นรุ่นของนักพัฒนาและ FAR ที่สมบูรณ์ มี Kitkat / Jellybean จำนวนมากที่เย็บเข้ามาในขณะนี้เพื่อให้มันทำงานและบูทได้
RossC

การยังเป็น " ตัวอย่างผู้พัฒนา" จริง ๆ แล้วมันอาจไม่สมเหตุสมผลนักที่จะคาดเดา (แม้ว่าฉันจะทำตามคำอธิบายของแดน) อาจเป็นไปตามที่ Dan อธิบายหรืออาจเป็น "ส่วนที่เหลือ" ยังไม่ได้ "ล้าสมัยอย่างสมบูรณ์" เมื่อมันยังทำงานกับ L-Release นั่นเป็นสิ่งที่แตกต่าง
Izzy

คำตอบ:


14

ไซโกตไม่ได้ผูกพันกับ Dalvik จริงๆมันเป็นเพียงกระบวนการเริ่มต้น Zygote เป็นวิธีที่ Android ใช้ในการเริ่มต้นแอพ แทนที่จะต้องเริ่มต้นกระบวนการใหม่ตั้งแต่เริ่มต้นโหลดทั้งระบบและกรอบ Android ใหม่ทุกครั้งที่คุณต้องการเริ่มแอพมันทำกระบวนการนั้นครั้งเดียวแล้วหยุดที่จุดนั้นก่อน Zygote ทำสิ่งใดเฉพาะแอป . จากนั้นเมื่อคุณต้องการเริ่มต้นแอปกระบวนการ Zygote จะแยกและกระบวนการลูกจะดำเนินการต่อจากจุดที่โหลดค้างไว้ให้โหลดแอปลงใน VM

แม้ว่าวิธีการนี้ได้รับการออกแบบมาสำหรับ Dalvik แต่ทว่าไม่มีเหตุผลที่ ART ไม่ควรทำงานในลักษณะเดียวกัน มันไม่จำเป็นต้องรวบรวมแอพ JIT ในขณะที่มันกำลังทำงาน แต่ก็ยังมีโหลด Java มากมายที่ไม่ขึ้นอยู่กับแอพ (เช่นเฟรมเวิร์ก Android ทั้งหมด) ดังนั้นจึงเหมาะสมที่จะใช้ fork-when เดียวกัน วิธีการโหลดเพื่อเริ่มกระบวนการใหม่

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


ตรงกับความเข้าใจของฉันเกี่ยวกับไซโกต (ไม่ใช่ผู้ไม่พัฒนา) จาก "มุมมองผู้ใช้" อาจทำให้คิดว่าไซโกตเป็น "แอพพลิเคชันเซิร์ฟเวอร์" ได้ง่ายกว่าโดยทำหน้าที่เป็น "เลเยอร์นามธรรม" ระหว่างแอพและระบบปฏิบัติการ (อย่างใดอย่าง HAL กับฮาร์ดแวร์นามธรรม): มันไม่สำคัญ "ด้านล่าง" (Dalvik หรือ ART) คืออะไรส่วนต่อประสานกับ "สิ่ง"
Izzy

1
มันอาจทำให้คิดว่า Zygote เป็นเซิร์ฟเวอร์แอปพลิเคชันได้ง่ายขึ้น แต่มันไม่ได้เป็นคำอธิบายที่แม่นยำ เป็นเพียงส่วนหนึ่งของระบบปฏิบัติการที่เริ่มต้นแอพและเป็นอย่างมากที่ด้าน OS ของขอบเขตแอพ -OS
Dan Hulme

ขอบคุณดังนั้นอย่างน้อย "ความเข้าใจขั้นพื้นฐาน" ของฉันก็ถูกต้อง (ฉันทราบว่า "แอปพลิเคชันเซิร์ฟเวอร์" ไม่ถูกต้อง แต่ง่ายต่อการเข้าใจโดย "ผู้ใช้ปกติ" - ดังนั้นขอให้ " บริการแอปพลิเคชัน" มาด้วย ฝั่ง OS;)
Izzy

สิ่งที่มีอยู่ในซอร์สโค้ดไม่ใช่ "เหลือน้อย" และเราไม่ได้อยู่ในยุคหลังของ Dalvik! Dalvik bitcode นั้นยังคงเป็น IR อยู่ แม้จะมีการตั้งค่าสูงสุดไม่ใช่ทุกอย่างที่ทอท. รวบรวมและยังมีบางสิ่งที่จำเป็นต้องตีความ ดังนั้นสำหรับเหล่านี้มีDalvikVM นอกจากนี้อุปกรณ์ที่มีพื้นที่จัดเก็บต่ำจะใช้การตีความ AOT น้อยลง สุดท้าย zygote เริ่มต้นจำนวนคลาสที่ใช้บ่อยซึ่งสามารถประหยัดพื้นที่ได้เนื่องจากสามารถแบ่งใช้ระหว่างแอปพลิเคชันหลาย ๆ
Paschalis

@Paschalis คุณสับสนในการรวบรวม JIT กับ DalvikVM เพียงเพราะการคอมมิชชัน ART รุ่นใหม่ใช้ JIT (ทันเวลา) ไม่ได้หมายความว่า Dalvik ยังคงอยู่ Oracle Java ทำการรวบรวม JIT ด้วยเช่นกันไม่ได้หมายความว่าใช้ Dalvik
Martin Konecny
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.