ก่อนอ่าน ถ้าเกิดว่าคุณไม่รู้เลยว่า ART Runtime คืออะไร แนะนำให้ย้อนกลับไปอ่าน ART runtime อาวุธลับใน Android 4.4 ซึ่งเขียนอธิบายเบื้องต้นแบบเข้าใจง่ายๆเอาไว้ให้ เพราะ Blog นี้จะมีความซับซ้อนจนถึงกับอ่านไม่รู้เรื่องสำหรับคนที่ไม่มีพื้นฐานเลย ซึ่งถ้าคิดว่าพร้อมแล้วเลื่อนลงไปอ่านต่อกันเลย (บทความนี้ขอนาย @nuuneoi มาแปะให้อ่านกันนะครับ เขียนมาครบและเข้าใจง่ายดีแล้ว ไปอ่านลิงก์ต้นทางได้ที่ http://nuuneoi.com/blog/blog.php?read_id=690)
ART vs Dalvik / AOT vs JIT
Dalvik เป็น Runtime ที่ถูกใช้และพัฒนามาอย่างต่อเนื่องนับตั้งแต่ Android รุ่นแรก (ซึ่งกระตุกมาก)
จนกระทั่ง Android 2.2 ทีมแอนดรอยด์ก็พัฒนา JIT (Just in time compiler) ขึ้นมาบน Dalvik เพื่อทำให้ประสิทธิภาพโดยรวมดีขึ้นอย่างมีนัยสำคัญ หลักการทำงานของมันคือพอเรารันแอพฯขึ้นมา มันจะแปลง Bytecode ของแอพฯ “เฉพาะในส่วนที่ใช้งาน” และเก็บไว้ในไฟล์ DEX (Dalvik Executable) และ ODEX (Optimized Dalvik Executable)
เจ้า JIT ก็เลยจะทำงานแบบ “คอมไพล์ไป ทำงานไป” ข้อดีคือใช้พื้นที่เก็บ Cache น้อย แต่ข้อเสียคือใช้พลังงาน CPU เยอะ หรือก็คือแบตหมดเร็วขึ้น เพราะต้องทำงานสองขั้น
จึงเกิดเป็น Runtime ตัวใหม่นามว่า ART (Android Runtime) ที่แอนดรอยด์ซุ่มพัฒนาอยู่หลายปี ถูกนำมาเป็นตัวทดลองบน Android 4.4 ให้คนสลับไปลองเล่นได้ และถูกนำมาเสียบแทบ Dalvik โดยสมบูรณ์บน Android “L”
Dalvik ใช้เทคนิคที่ชื่อว่า JIT ส่วน ART ใช้เทคนิคที่ชื่อว่า AOT (Ahead of Time) หลักการทำงานคือ “คอมไพล์ทั้งแอพฯเป็น Binary ให้ตั้งแต่ตอนติดตั้งแอพฯ”
พูดง่ายๆคือหลังจากติดตั้งแล้วโปรแกรมจะสามารถทำงานได้อย่างสมบูรณ์โดยไม่ต้องผ่านการคอมไพล์อะไรอีกเลย
ข้อดีที่เกิดขึ้นทันทีคือ (1) โปรแกรมจะโหลดเร็วขึ้นมาก กดปุ๊บมาปั๊บ (2) ใช้ CPU น้อยลงมาก นั่นแปลว่าใช้แบตลดลง (3) โปรแกรมทำงานเร็วขึ้น ลื่นขึ้น เพราะไม่ต้องคอมไพล์ระหว่างทำงาน
แต่ข้อเสียก็คือ การติดตั้งแอพฯอาจจะต้องใช้เวลานานขึ้นเพราะต้องคอมไพล์ทั้งแอพฯตอนติดตั้ง (ถึงในเอกสารจะบอกว่า install-time verification น้อยกว่า Dalvik ก็ตาม แต่ต้องดูระยะเวลาโดยรวมกันอีกที) จากที่มีคนทดลองให้ดู ก็นานขึ้นถึง 50% เลยทีเดียวนะ อีกข้อเสียนึงที่ยังไม่รู้ว่าจะเป็นยังไงคือพื้นที่ที่ใช้งานจะใช้มากขึ้นหรือเปล่า? จากข้อมูลที่ได้มาจากปีที่แล้ว พบว่า ART จะใช้พื้นที่ในการติดตั้งแอพฯมากขึ้นถึง 10-20% เพราะต้องคอมไพล์ทั้งแอพฯเก็บไว้เป็น Binary แต่ไม่แน่ใจว่า ART ตอนนี้พัฒนาไปถึงไหนแล้ว อาจจะมีเทคนิคอะไรที่ใช้พื้นที่น้อยลงก็เป็นได้ ต้องดูกันต่อไปครับ
Cross Platform Architecture
อย่างที่อธิบายไว้ด้านบน การทำงานของ AOT คือการคอมไพล์ตอนติดตั้ง มันจึงกลายเป็น Cross Platform Architecture ไปโดยปริยาย เพราะไม่ว่าจะบน CPU Architecture ตัวไหน ART ก็จะคอมไพล์เป็น Binary เพื่อ Architecture นั้นๆได้หมด
อย่างไรก็ตาม ไม่รวมถึง JNI ที่ต้องคอมไพล์แยกแพลตฟอร์มเหมือนเดิม เพราะ Input ของ ART AOT Compiler คือไฟล์ dex
Garbage Collector ดีขึ้นอย่างมีนัยสำคัญ
เมื่อ 5 ปีที่แล้วเราเคยพูดไว้ว่า “GC เป็นปัญหาที่ใหญ่ที่สุดของ Android”
จวบจนถึงวันนี้ มันก็ยังเป็นปัญหาที่ใหญ่สุดอยู่ดี ถึงแม้มือถือจะแรงแค่ไหน การกระตุกก็ยังมีให้เห็นอยู่เรื่อยๆ เพราะเจ้า GC นี่เอง
เมื่อเราใช้งานไปเรื่อยๆ จะมี Memory ส่วนหนึ่งถูกเก็บไปโดย Garbage Collector ตามสไตล์ของ Java แต่ด้วยประสิทธิภาพอันต่ำต้อยของ GC บน Dalvik ทำให้มันเกิด Pause Time บ่อยมาก ที่เรา Scroll แล้วเห็นมันกระตุกๆ ส่วนใหญ่ก็เกิดจาก GC Pause Time นี่แหละ โดยใน Dalvik จะมี Pause Time สองครั้งต่อหนึ่ง GC
และภาพนี้ทำให้เราตาลุกวาวได้เมื่อคืนนี้
ART ตอบโจทย์ที่เป็นปัญหามานานของ Android เป็นที่เรียบร้อยแล้ว ด้วยการปรับปรุง GC อย่างมีนัยสำคัญ ลด Pause Time เหลือเพียง 1 ครั้งและกินเวลาน้อยลงมากอีกด้วย
ผลที่จะเห็นคือจากนี้แอพฯจะ “ลื่น” ขึ้นโดยที่นักพัฒนาไม่ต้องไปแก้อะไร เพราะปัญหาทั้งหมดก่อนหน้านี้มันเกิดจากตัวแอนดรอยด์เอง แต่ตอนนี้ไม่ใช่ปัญหาละ =)
แต่ปัญหาก็ยังดำรงต่อไปสำหรับคนที่ยังไม่ได้อัพ L และจะมีกี่ % กันน้าที่ได้อัพเจ้า L เร็วๆนี้ …
Unified Stack
แอพฯแอนดรอยด์จะมีอยู่สองส่วนคือ Native และ Java บน Dalvik ทั้งสองตัวใช้ Stack คนละตัวกัน แต่บน ART ทั้ง Java และ Native จะใช้ Stack ตัวเดียวกัน
ไม่แน่ชัดเรื่องประโยชน์แบบที่เห็นได้ด้วยตาเปล่า แต่เชื่อว่าน่าจะช่วยให้การจัดการ Memory ดีขึ้น
Stricter JNI
หากใครใช้ JNI ในการพัฒนาแอพฯด้วยแล้วหละก็ อาจจะปวดหัวกับ ART ได้พอสมควร เพราะมีการเปลี่ยนแปลงอะไรมากมาย บางทีก็ถูก throw error ออกมาทั้งๆที่บน Dalvik ไม่เป็น อันนี้ให้ลองไปศึกษาและ Handle ทุกเคสให้ครับด้วยครับ อ่านรายละเอียดเพิ่มเติมเกี่ยวกับตัวนี้ได้ที่ Verifying Apps ART
ไม่ใช่ทุกแอพฯจะรันได้สมบูรณ์บน ART
ART เป็นตัวทดลองบน Android 4.4 และยังมีรายงานบั๊กออกมาเรื่อยๆ แต่สุดท้ายก็ถูกนำมาใช้จริงเสียแล้วใน Android 5.0
ดังนั้นอย่า Expect ว่าแอพฯทุกตัวต้องรันได้ ถึง Keynote เมื่อวานจะพูดว่าใช้โค้ดเดิมก็ตาม ซึ่งเค้าก็พูดถูกนะ แต่สุดท้ายโลกมันไม่ได้สวยขนาดนั้น
หากคุณเป็น Developer จงเทสต์แอพฯบน ART ให้เรียบร้อยตั้งแต่เนิ่นๆด้วยครับ สำคัญมาก
ลื่นไหล แบตหมดช้า เนื้อที่หมดเร็ว ข้อสรุปของ ART
หากให้สรุปเป็นข้อๆว่า ART ส่งผลอย่างไรต่อผู้ใช้บ้าง ก็คงได้สามข้อใหญ่ๆคือ
(1) ลื่นขึ้นจาก Pre-compiled Binary
(2) แบตหมดช้าลง จากการที่ไม่ต้องคอมไพล์ไปทำงานไปอย่างที่ JIT ทำใน Dalvik
(3) เนื้อที่หมดเร็วขึ้น จากการที่ ART กินพื้นที่มากขึ้น
และส่งผลต่อนักพัฒนาอย่างไรบ้าง?
ถ้าแอพฯไม่ได้ทำอะไรซับซ้อนซ่อนเงื่อนเพื่อนทรยศ ก็น่าจะสามารถใช้งานได้เลย ไม่มีปัญหา แต่ถ้าทำอะไรซับซ้อน ย้ำอีกทีว่าให้ทดสอบให้ดีก่อนนะครับ ไม่งั้นมีปัญหาแน่ๆ
จะได้อัพเมื่อไหร่
ก็ยังเป็นคำถามที่ตลกๆของ Android ที่พอประกาศเปิดตัวเวอร์ชั่นใหม่แล้ว ผ่านไปปีนึงก็ไม่มีใครได้ใช้สักที นี่เป็นสาเหตุที่เราไม่ได้ตื่นเต้นอะไรมากนักกับการเปิดตัวเมื่อวาน เพราะ Android ถึงจะพัฒนาไว แต่ก็อัพเดตช้าเหลือเกิน
สำหรับ Android L ก็คงต้องดูกันต่อไปว่าจะได้อัพกันเมื่อไหร่ ส่วนนักพัฒนา วันนี้เค้าจะปล่อยตัว SDK ให้ลองกันแล้ว รอโหลดกันได้ครับที่ Android Developer =)
สวัสดีครับ
เรื่องขนาด app ใหญ่ขึ้น 10-20% ไม่น่ากังวลใจมากมายนะ เดี๋ยวนี้อย่างน้อยก็ 8GB แล้ว อย่างแย่ก็ 4GB ต่างจากสมัยก่อน ช่วงแรกๆ แอนดรอยด์ 1.5 1.6 มือถือมี พื้นที่ให้ใช้น้อย 256MB 512MB บ้าง(storage นะ ไม่ใช่ RAM) และตอนนั้นยังแบ่งเป็น 2 ส่วนคือ system กับ data เพิ่งมารวมทีหลัง สรุปคือเทียบข้อดีแล้ว เร็วๆ ลื่นๆ ดีกว่า
ผมคิดถึงตอน App Chat มาแรกๆ เลยครับ พื้นที่ไม่พอ 5555
ผมเริ่มด้วย Moto Milestone 2.1 มั้ง
Acer Liquid E เหลือให้ใช้200เมก จะร้องไห้
ในความเป็นจริง…
1.app(ที่ไม่ใใช่เกมส์) sizeมันใหญ่ขึ้น20%เนี่ย ถูก
แต่ถ้าเป็มเกมส์ เท่าที่เจอบวมเล็กน้อยสุดสุดก็40%
100%ยังเคยเจอมาแล้ว
2.จริงที่สมัยนี้เครื่องต่างๆให้romมาเยอะ แต่…เดี่ยวนี้ก็มักไม่ให้ใส่การ์ด แล้วมันจะไม่เต็มอยาางไร เพลง หนัง ที่ต้องนัดลงเครื่องก็กินไม่น้อย
motoG (xt1033) จากที่เคยเหลือ2Gbเปลี่ยนมาartเหลือแค่4ร้อยเมก เปลี่ยนกลับแทบไม่ทัน
เรื่องความเร็ว มันก็ไม่ได้มาก ตีว่า20-30%
ก็แล้วแต่คนจะเลือกว่า จะยอมเสียพื่นที่20%เพื่อความเร็วขึ้น20%มั้ย
เกมที่กินเนื้อที่มากๆส่วนใหญ่มันเป็น native ไม่ใช่หรอ ไม่น่าจะมีผลอะไรกับ art ป่าว
แต่ L นี่บังคับใช้
เพราะงั้นเครื่องที่เป็น L
ถ้าออกมา ก็ขอrom64Gbนะถ้าใส่SDไม่ได้
+1
ตอนนี้เล็งที่ Mi3 64gb ที่ราคาตกมากระแทกใจอยู่พอดีเลยครับ
แต่กะลังชั่งใจอยู่ว่า..
1. snapdragon 800 MiUi จะได้ไปต่อถึง L ไม๊? กับ
2. ตอนนี้ติด LTE ไปแล้วงะ ^^"
เจอย่อหน้าสุดท้าย หายตื่นเต้นกันเลยทีเดียว
คงจะได้ร้องเพลงรอกันอีกหลายเพลงกว่าจะมา
*ขอโทษครับ มันขึ้นซ้ำ
Incredible S ของผม มีROM 1.1GB
ตอนนี้ลง custom rom เป็น VivoKat #8(Kitkat 4.4.2)
เมื่อวานลองเปลี่ยน เป็น ART ปรากฏว่า ต้องลบโปรแกรมออกเกือบหมด
ตอนนี้ลงเกมส์ได้แค่เกมส์เดียว
เพราะโปรแกรมส่วนใหญ่ที่ใช้ ย้ายไป SD ไม่ได้
เร็วขึ้นหรือเปล่า ยังตอบไม่ได้ยังไม่เห็นความต่าง
เรื่องประหยัดไฟต้องรอดูกันยาวๆ
เนื้อที่หมด อันนี้ comfirm ประมาณว่าต้องหาโปรแกรมที่ย้ายไป SD ได้ถึงจะลงได้
แต่ปริมาณ ram คงเหลือมีมากขึ้นครับ ram 768 MB เมื่อก่อนเหลือประมาณ 200MB
ตอนนี้เหลือประมาณ 290 MB อันนี้ไม่รู้ว่าเพราะลบโปรแกรมที่ไม่ใช้ออกหรือเปล่า
เย่ๆ ในที่สุดก็เจอคนที่ยังใช้Incredible S เหมือนกันละ 555 นึกว่ามีแต่ผมที่ยังใช้รุ่นนี้คนเดียวบนโลกซะอีก ><
S3 ผม รอความหวังจาก cm เท่านั้นเบยค้าบ ลองใช้ art แล้วเห็นผลลื่นไหลพอควรคับ
จะเหมือนผลไม้ตอน IOS 7 รึเปล่าว
Z ผม จะได้กินไหมเนี่ย ???? 4.4.3 กำลังจะมา อยู่เลยยยย