Android หรือ Java ใช้พลังงานมากขึ้นเนื่องจากใช้งานบนเครื่องเสมือนจริงหรือไม่?


14

เนื่องจากแอปพลิเคชัน Android ทำงานบน JVM (Dalvik VM) ซึ่งโดยทั่วไปเป็นโปรเซสเซอร์เสมือนและทุกคำสั่งเสมือนต้องแมปกับคำสั่งดั้งเดิมของชิปเซ็ตพื้นฐานการทำแผนที่นี้ส่งผลให้สิ้นเปลืองพลังงานมากขึ้นเนื่องจากการทำแผนที่นี้หรือไม่

คำถามนี้สามารถขยายไปยัง Java และยังเป็นประโยคที่ว่า "แอปพลิเคชัน Java ใช้พลังงานมากขึ้นหรือไม่" นี่เป็นสาเหตุที่โทรศัพท์ Android ใช้งานแบตเตอรี่ที่น่าตกใจเมื่อเทียบกับแพลตฟอร์ม / โทรศัพท์อื่น ๆ หรือไม่?

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

บริบท : อ้างจาก Wikipedia:

  1. Java bytecode คล้ายกับภาษาแอสเซมบลีสำหรับรหัส C
  2. จากมุมมองของคอมไพเลอร์เครื่องเสมือน Java เป็นเพียงตัวประมวลผลอื่นที่มีชุดคำสั่งคือ Java bytecode ซึ่งสามารถสร้างรหัสได้
  3. JVM มีสถาปัตยกรรมสแต็ก Dalvik เป็นเครื่องเสมือนกระบวนการซึ่งไม่เหมือนกับการทำเสมือนจริงแบบ JVM และมีสถาปัตยกรรมการลงทะเบียน

เนื่องจากภาษาการเขียนโปรแกรม Java ได้รับการคอมไพล์ด้วย bytecode (เหมือนแอสเซมบลี) และทำงานบนตัวประมวลผลเสมือนจึงให้การพกพารหัสซอฟต์แวร์ที่แท้จริง นอกจากนี้เนื่องจากมี JVM สำหรับ Linux และ Linux ได้รับการพอร์ตเข้ากับฮาร์ดแวร์แบบเปิดการรวมกันสามารถให้ความสะดวกในการพกพาแอปพลิเคชันที่แท้จริงในสแต็กทั้งหมด

Power : คำถามสำคัญที่ทำให้เกิดปัญหานี้ - สำหรับชุดการทำงานเดียวกันของรหัสซอฟต์แวร์หรือแอปพลิเคชันของคุณเปอร์เซ็นต์ของรอบสัญญาณนาฬิกา CPU ของคุณมีสาเหตุมาจากสภาพแวดล้อมของเวลาทำงาน นี่คือสภาวะแวดล้อมการคอมไพล์ Just-In-Time ของ JVM สมัยใหม่ซึ่งหาก bytecode ถูกคอมไพล์กับคำสั่งดั้งเดิมของชิปเซ็ตพื้นฐานดังนั้นรันไทม์ควรทำงานในระหว่างการรวบรวม jit เท่านั้น ดังนั้นจำนวนรอบสัญญาณนาฬิกาของ CPU จะถูกใช้ไปมากขึ้นในการมีสภาพแวดล้อมแบบรันไทม์ซึ่งคาดว่าจะส่งผลให้เกิดการสิ้นเปลืองพลังงาน ฉันสนใจเฉพาะด้านการใช้พลังงานเท่านั้นไม่ใช่เรื่องประสิทธิภาพเทียบกับภาษาที่พิมพ์และสร้างขึ้นแบบสแตติกและเข้าใจถึงข้อดีของ Java คำถามย่อยที่อาจเกี่ยวข้อง:

  • Java Run time ใช้ libc ในการทำงานหรือไม่
  • ประเด็นที่เกี่ยวกับการใช้พลังงานเหล่านี้แปลเป็น Dalvik VM และ Android หรือไม่?
  • แทนที่จะพูดคุยกันเรื่องการสิ้นเปลืองพลังงานแบตเตอรี่ที่ไม่ดีของ Android โดยไม่ต้องพูดถึงหน้าจอและชิปเซ็ตไร้สาย - ให้พูดคุยว่า iPhone 5 มีแบตเตอรี่ขนาด 1440 mAH ซึ่งเล็กมากเมื่อเทียบกับโทรศัพท์ Nexus รุ่นใหม่ ขบวนความคิดทั้งหมด (Java, ตัวประมวลผลเสมือน, การทำแผนที่การเรียนการสอน, Android) เกิดขึ้นเพราะเพื่อนผู้ภักดี iphone อ้างว่านี่อาจเป็นเหตุผลสำหรับ iphone ของเขาที่มีแบตเตอรี่ที่ดีกว่า Nexus (สุดยอด) ของฉัน

ในกรณีใด ๆ ขอขอบคุณสำหรับคำตอบด้านล่าง


1
อย่าเปรียบเทียบแบตเตอรี่ด้วย mAh นั่นคือปัจจุบัน; ในทางทฤษฎีคุณอาจมีแบตเตอรี่ขนาด 2 mAh ที่ให้พลังงานมากกว่า (วัตต์ต่อชั่วโมง) มากกว่าแบตเตอรี่ที่มี 10,000,000 mAh ขึ้นอยู่กับแรงดันไฟฟ้า Nexus 4 มีแบตเตอรี่ 8 Wh ในขณะที่ iPhone 5 มีแบตเตอรี่ 5.45 Wh ความแตกต่างส่วนใหญ่มาจากขนาดหน้าจอ: Nexus 4 มีหน้าจอ 4.7 นิ้วในขณะที่ iPhone 5 มีขนาด 4 นิ้วที่มีความละเอียดสูงและความสว่างสูงกว่า (608 cd / m ^ 2 vs. 500) แตกต่างกันอย่างเห็นได้ชัด: Nexus 4 มี quad-core @ 1.5 GHz, iPhone 5 มี dual core ที่ 1.3 GHz เร็วขึ้น = การใช้แบตเตอรี่มากขึ้น
— allquixotic

1
โดยทั่วไปแล้ว iPhones จะมีอายุการใช้งานที่ยาวนานกว่าด้วยแบตเตอรี่ที่มีขนาดเล็กลงเนื่องจากแพลตฟอร์มทั้งหมดได้รับการออกแบบให้มีขนาดเล็กลง: พื้นที่ทางกายภาพน้อยลง, หน้าจอที่เล็กกว่า, CPU ที่เล็กกว่า, แกนที่น้อยลง, ขีดความสามารถน้อยลง โทรศัพท์ Android ได้รับความนิยมในทิศทางตรงกันข้าม: ยิ่งใหญ่และแกนมากขึ้นและมีพลังมากขึ้นและเร็วขึ้น แน่นอนว่าพวกเขากำลังต้องการแบตเตอรี่ที่ใหญ่กว่ามากเพื่ออายุการใช้งานแบตเตอรี่ที่เท่ากัน บางครั้งแม้แต่แบตเตอรี่ขนาดใหญ่ก็ไม่สามารถชดเชยการสิ้นเปลืองพลังงานได้อย่างเหมาะสมและในกรณีนี้คุณมีโทรศัพท์ที่อายุการใช้งานแบตเตอรี่ต่ำ
— allquixotic

คำตอบ:


25

คำถามของคุณจะขึ้นอยู่กับหลายสมมติฐานข้อบกพร่อง ให้ฉันพยายามล้างพวกเขา:

  • คุณพูดว่า "JVM (Dalvik VM)" นั่นก็เหมือนกับการพูดว่า "เครื่องบิน (จักรยาน)" สองสิ่งนี้ไม่มีอะไรเกี่ยวข้องกันเลย

  • คุณพูดว่า "... ซึ่งโดยทั่วไปเป็นโปรเซสเซอร์เสมือน" เพียงแค่เท็จ มันเป็นไม่ได้กรณีที่ทุกครั้งที่คำว่า "เครื่องเสมือน" หรือตัวย่อ "VM" ถูกนำมาใช้ในบริบททางเทคนิคที่จะเป็นหลักเทียบเท่ากับVMware Workstation นี่เป็นเพราะผลิตภัณฑ์อย่าง VMware นั้นจำลองคอมพิวเตอร์ทั้งเครื่องไม่ใช่เฉพาะซีพียูและใช้ระบบปฏิบัติการที่อยู่ด้านบนของระบบปฏิบัติการอื่น Dalvik VM ไม่ทำงานเช่นนั้น ไม่ได้ใกล้เคียง.

  • Java เป็นเพียงภาษาโปรแกรม มันเป็นไวยากรณ์ โปรแกรม Android / Dalvik เกิดขึ้นเพื่อใช้ไวยากรณ์เดียวกันหรือคล้ายกันมากกับภาษาโปรแกรมเดสก์ท็อป / เซิร์ฟเวอร์ที่ไม่เกี่ยวข้องอย่างสมบูรณ์ซึ่งเรียกว่า Java ซึ่งทำงานบน Java Virtual Machine ในทางทฤษฎีคุณสามารถเขียนโค้ด Java ที่มีความเร็วใกล้เคียงกับ C code มากเนื่องจากมีทั้งภาษาการเขียนโปรแกรมระดับสูง มารในรายละเอียดของการใช้งานการเรียกใช้ไลบรารีและวิธีการที่รันไทม์ได้รับการออกแบบซึ่งมีน้อยมากที่จะทำกับไวยากรณ์ของภาษา

  • เป็นเรื่องทั่วไปที่จะกล่าวว่า Dalvik VM, Sun Java Hotspot JVM หรือไวยากรณ์ภาษาการเขียนโปรแกรม Java รับผิดชอบการใช้พลังงานสูง เหตุผลก็คือว่าคุณต้องเปรียบเทียบสิ่งที่คุณกำลังพูดคุยเกี่ยวกับการปฏิบัติงานของอย่างอื่น ในกรณีทั่วไปที่สุดเมื่อคุณเพิ่งเปรียบเทียบความสามารถ "ที่ดีที่สุด" ของทั้งสองแพลตฟอร์มมันเป็นหลักการที่เป็นไปได้ที่จะสร้างแอป Dalvik ที่เร็วหรือเร็วกว่าโปรแกรมบนแพลตฟอร์มอื่น ๆ นอกเหนือจากการจัดการหน่วยความจำอัตโนมัติและการรวบรวม JIT - คุณสมบัติที่เป็นมาตรฐานในสภาพแวดล้อมการเขียนโปรแกรมเกือบทุกวันนี้รวมถึงบน iOS และใน JavaScript / HTML5 - มีน้อยมากที่แยก Dalvik ออกจาก Objective-C, .NET, Ruby, Oracle Hotspot JVM, Python และอื่น ๆ

  • การรับรู้ว่า "Java ช้า" เกิดจากปัญหากับ Java เวอร์ชันเก่าเนื่องจากพวกเขาไม่มี Just-In-Time Compiler (JIT) หรือ JIT ที่พวกเขามี จำกัด ในการใช้งาน JVM มีJust-In Time Compilerเป็นเวลานานมากแล้ว คอมไพเลอร์ JIT เป็นส่วนหนึ่งของรันไทม์ (ตัวอย่างเช่น JVM) ที่ใช้หน่วยประมวลผลอิสระ bytecode - ตัวอย่างเช่น Java bytecode - และรวบรวมมันเป็นคำแนะนำพื้นเมืองสำหรับ CPU กระบวนการนี้เสร็จสิ้นเมื่อโปรแกรม Java เริ่มทำงานและคอมไพเลอร์ JIT ขั้นสูงสามารถปรับฟังก์ชั่นหรือคำสั่งของแต่ละบุคคลที่รันไทม์เพื่อปรับปรุงประสิทธิภาพของพวกเขาตามผลลัพธ์ที่สังเกตได้ ตัวอย่างเช่นถ้าเมธอดคืนค่าจริงทุกครั้งที่มันถูกเรียกใช้ แต่มันไม่ชัดเจนจากไบต์เดิมที่มันทำเช่นนั้นคอมไพเลอร์ JIT สามารถรับรู้ว่ามันเพิ่งจะคืนค่าจริงและแทนที่การเรียกใช้ฟังก์ชันด้วยฮาร์ด - ค่าโค้ดของ "true" นี่เป็นเพียงตัวอย่างเดียว

  • การรวบรวม JIT และเทคนิคการวิเคราะห์โค้ดแบบไดนามิกรันไทม์ทำให้เกิดความก้าวหน้าอย่างมากในช่วงไม่กี่ปีที่ผ่านมา หลายคนในชุมชนวิทยาศาสตร์คอมพิวเตอร์เชื่อว่าในอีกหนึ่งหรือสองทศวรรษที่ผ่านมาการวิเคราะห์ที่มีความซับซ้อนที่มีอยู่ในการตีความแบบไดนามิก / ภาษาเรียบเรียงเช่น Java, C # และทับทิมจะสูงเพื่อให้ในกรณีส่วนใหญ่ภาษาเหล่านี้จะดำเนินการได้เร็วขึ้นที่ รันไทม์กว่าภาษาที่รวบรวมโดยสแตติกเช่น C และ C ++ นั่นเป็นเพราะคอมไพเลอร์แบบสแตติกมักจะถูก จำกัด ให้คอมไพล์โค้ด ณ เวลาบิลด์และโค้ดไม่ถูกแก้ไขในรันไทม์ แต่ในสภาพแวดล้อมรันไทม์ที่รหัสของโปรแกรมสามารถเขียนตัวเองอีกครั้งในระหว่างการดำเนินการเพื่อให้ทำงานได้อย่างมีประสิทธิภาพมีจำนวนมากที่สามารถทำได้โดยการวิเคราะห์ประสิทธิภาพของรหัสและทำการปรับเพื่อลดความซับซ้อนของรหัสหรือจำนวนคำสั่งที่ทำงานบน CPU สำหรับรหัสที่เรียกบ่อย ๆ การลงทุนเวลาที่ต้องใช้ในการวิเคราะห์นั้นมีค่าเกินกว่าความได้เปรียบด้านประสิทธิภาพของการเรียกรหัสที่เร็วขึ้น

  • ควรสังเกตว่า Android Dalvik VM นั้นมี JIT ด้วยและไม่ได้ใช้รูปแบบ bytecode เช่นเดียวกับ Sun / Oracle JVM JIT ของ Dalvik ได้รับการปรับให้เหมาะสมกับสภาพแวดล้อมของหน่วยความจำต่ำและมีความก้าวหน้ามากเท่ากับการปรับปรุงประสิทธิภาพรันไทม์ ดังนั้นจึงเป็นเรื่องบังเอิญที่ JVM และ Dalvik ใช้การปรับแต่งที่คล้ายกันสำหรับสภาพแวดล้อมรันไทม์บนพื้นฐาน Java ของพวกเขา แต่ภายใต้ประทุนพวกเขาค่อนข้างแตกต่างกัน

  • อย่าลืม Dalvik นั้นเอง เคอร์เนล Linux กระบวนการระบบระดับต่ำ และเว็บเบราว์เซอร์หลักของ Android (ทั้ง Firefox และ Chrome) เขียนด้วยภาษา C / C ++ ดังนั้นจึงไม่มีข้อกังวลเกี่ยวกับค่าใช้จ่ายใด ๆ ที่โปรแกรม Dalvik จะทำได้ นี่เป็นเช่นเดียวกับ iOS หากคุณกำลังพูดถึงAndroid ที่บริสุทธิ์และไม่ใช่ผู้ให้บริการ / บุคคลที่สามซึ่งอยู่ด้านบนของมันสัดส่วนที่ใหญ่มากของสิ่งที่ประกอบด้วยคอร์ Android หลักไม่ได้เขียนโดยใช้ Dalvik

  • ผู้พัฒนาแอปพลิเคชั่นบน Android สามารถเลือกเขียนโค้ดเนทีฟผ่าน Dalvik หากนักพัฒนาแอปพลิเคชันรู้สึกว่า Dalvik ทำหน้าที่เป็นคอขวดในการทำงานของรหัสหรือทำให้แบตเตอรี่หมดเร็วเกินไปพวกเขาสามารถเขียน C / C ++ หรือแม้แต่รหัสประกอบหากพวกเขาเลือกโดยไม่ต้องได้รับการอนุมัติจาก Google ทำเช่นนั้นและแจกจ่ายแอพของพวกเขาแบบนั้น

ต่อไปนี้คือสาเหตุที่แท้จริงว่าทำไมอุปกรณ์ที่ใช้แบตเตอรี่ Android หรืออุปกรณ์ใด ๆอาจมีปัญหาเกี่ยวกับอายุการใช้งานของแบตเตอรี่:

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

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

ในที่สุดฉันไม่เห็นด้วยกับการประเมินของคุณว่า Android มีปัญหาแบตเตอรี่เสื่อมกว่าแพลตฟอร์มมือถืออื่น ๆ โทรศัพท์และอุปกรณ์บางอย่างอาจมีปัญหาอายุการใช้งานแบตเตอรี่เนื่องจากความจุของแบตเตอรี่เมื่อเทียบกับการใช้พลังงานของฮาร์ดแวร์ การตั้งค่าพลังงานที่ปรับให้เหมาะสมไม่ดี (เลือกโดยผู้ใช้ผู้ให้บริการหรือผู้ผลิต) หรือแอป Bloatware ที่ทำให้ชิปในโทรศัพท์ตื่นตลอดเวลา แต่สำหรับทุกตัวอย่างของอุปกรณ์ที่มีปัญหาเกี่ยวกับแบตเตอรี่ฉันสามารถมอบตัวอย่างของอุปกรณ์ที่มีอายุการใช้งานแบตเตอรี่ที่ดีเยี่ยมให้กับคุณ ไม่มีวิธีง่ายๆในการพูดคุยทั่วไปว่า "it Dalvik" หรือ "it Linux" หรือ "it Java" การเพิ่มประสิทธิภาพพลังงานเป็นฮาร์ดแวร์ / ซอฟแวร์ที่มีความซับซ้อนซึ่งสอดคล้องกับข้อกังวลของคู่แข่งรวมถึงประสิทธิภาพการตอบสนอง และความคาดหวังของผู้ใช้สำหรับอายุการใช้งานแบตเตอรี่โดยมีข้อดีข้อเสียของแต่ละตัวเลือก เพื่อให้เข้าใจถึงโพรไฟล์พลังงานของอุปกรณ์อย่างละเอียดคุณจะต้องตรวจสอบแบตเตอรี่ตัวเองฮาร์ดแวร์ทั้งหมดและซอฟต์แวร์ทั้งหมดที่ทำงานบนอุปกรณ์นั้นอย่างละเอียด


1
+1 มันเป็นเรื่องเล็กน้อยดร. แต่มันก็มีทั้งหมดแม้แต่คำตอบทางเทคนิคที่ดี
— Doktoro Reichard

ขอบคุณทุกจุดยุติธรรม ฉันใช้คำบางคำผิดอย่างผิดพลาดแทนกันเพราะฉันถามสิ่งที่ฉันไม่รู้ ได้ทำการแก้ไขในคำถามตอนนี้ถ้าคุณยังสนใจ
— PKM

คำตอบนี้ค่อนข้างให้ข้อมูล แต่ก็ห่างไกลจากคำถาม หลักของคำถามคือค่าใช้จ่ายของ VM ใช้เวลา CPU มากขึ้นจากนั้นจะบันทึกโดยการปรับให้เหมาะสมที่ใช้ มันกลายเป็นว่าทำไม Android ถึงดีกว่า iOs ถึงแม้ว่าคำถามจะมีคำใบ้สำหรับฝั่ง orher
— Igor Čordaš

มีสมมติฐานที่มีข้อบกพร่องเช่นกัน IOS ขาดการจัดการหน่วยความจำอัตโนมัติของ Mac OS และแน่นอนว่าการจัดการซึ่งทำให้ Dalvik เป็น "Java" ที่มีปัญหาทั่วไปทั้งหมด ไม่กี่เดือนที่ผ่านมามีภาพรวมที่ดีเกี่ยวกับปัญหา Garbage Collection (GC) ที่ Dalvik กำลังมี: anandtech.com/show/8231// - หากมีผลกระทบต่ออายุการใช้งานของแบตเตอรี่หรือประสิทธิภาพที่ฉันไม่สามารถบอกได้
— pvblivs

@pvblivs ในขณะที่มันเป็นความจริงว่าการเขียนโค้ดแอปพลิเคชัน "ระดับสูง" สำหรับ iOS ใช้การนับการอ้างอิงอัตโนมัติแทน GC ในขณะที่ Dalvik ใช้ GC และ "ดังนั้น" (ฉันไม่ได้บอกว่านี่เป็นเรื่องจริง แต่คุณดูเหมือนจะเถียง และอย่างน้อยก็เป็นไปได้) iOS คือ "มีประสิทธิภาพมากกว่า" ... คุณยังคงคิดถึงจุดที่แอพ Android ไม่ต้องเขียนใน Java และอันที่จริงสามารถเขียนในแอสเซมเบลอร์หรือ แม้กระทั่งรหัส ARM ดั้งเดิมหากคุณต้องการ! แอพที่มีประสิทธิภาพสูงและสิ่งต่าง ๆ ในตัวควรใช้รหัสดั้งเดิมโดยไม่มี GC
— allquixotic

5

ในคำตอบนี้ฉันจะเปรียบเทียบประสิทธิภาพกับ Android และ IOS เนื่องจากทั้งสองใช้ส่วนแบ่งการตลาดมากกว่า 80%

แอพ Java ไม่ใช้พลังงานมากขึ้น ( http://www.javarants.com/2004/05/04/looks-like-apple-should-switch/ ) Java VM ของ Oracle หรือในความเป็นจริง Dalvik VM ของ Google นั้นถือว่ามีประสิทธิภาพมากกว่า Objective-C ของ IOS Java สามารถปรับโค้ดให้เหมาะสมก่อนที่จะถูกเรียกใช้บนโทรศัพท์ซึ่งอาจส่งผลให้ประสิทธิภาพดีขึ้นมาก ห้องสมุด Java เป็น Open Source ดังนั้นจึงได้รับการปรับให้เหมาะสมโดยผู้พัฒนาหลายร้อยราย ในทางตรงกันข้ามกับ IOS นักพัฒนาซอฟต์แวร์ของ Apple เท่านั้นที่สามารถเปลี่ยนรหัสได้ ตรวจสอบน้อย = ประสิทธิภาพที่มีศักยภาพน้อย

โปรแกรม Android ยังสามารถรันโค้ดเนทีฟ C ซึ่งอาจโต้แย้งได้เร็วกว่า Object-C อีกครั้ง (ภาษาเดียวที่รองรับบน IOS)

เหตุผลที่ Google ตัดสินใจใช้ Dalvik VM นั้นเพื่อความสะดวกในการพกพา ฉันรู้สถาปัตยกรรมซีพียูสี่แบบที่ Android สามารถทำงานได้อย่างเป็นทางการ (ARM, MIPS, x86, I.MX) ในขณะที่ระบบปฏิบัติการโทรศัพท์อื่น ๆ สามารถใช้เพียงหนึ่ง (ARM) ( http://en.wikipedia.org/wiki/Comparison_of_mobile_operating_systems ) ดังนั้นการเปรียบเทียบประเภท CPU ที่แตกต่างกันด้วยเช่น IPhone นั้นไม่ยุติธรรม หาก Android ทำงานบน iPhone แล้ว Android จะเทียบได้กับประสิทธิภาพที่เหนือกว่าและอายุการใช้งานแบตเตอรี่

"แอปพลิเคชัน Java ใช้พลังงานมากขึ้นหรือไม่" เพียงแค่ไม่
ทำไมโทรศัพท์ Android มีอายุการใช้งานแบตเตอรี่ที่น่าตกใจเมื่อเทียบกับแพลตฟอร์ม / โทรศัพท์อื่น ๆ ? โทรศัพท์ Android หลายรุ่นถูกสร้างขึ้นราคาถูกกว่า IPhone ของ Apple แต่ดูที่ความแตกต่างของราคา IPhone มีราคาสูงกว่าเพราะแบตเตอรี่มีขนาดใหญ่กว่าด้วย (และเป็น CPU ที่ช้ากว่าโดยเฉลี่ย) โทรศัพท์ Android ของฉัน (Google Galaxy Nexus) มีอายุการใช้งานแบตเตอรี่เทียบเคียงกับ IPhone 4G แต่มีข้อกำหนดฮาร์ดแวร์ที่เร็วกว่ามาก (1GHz เทียบกับ 1.2GHZ)

แก้ไข: Java สามารถเพิ่มประสิทธิภาพรหัสโดยไม่ต้องมีความรู้ของโปรแกรมเมอร์ สมบูรณ์แบบโค้ด C จะทำงานเร็วกว่า Java / Objective-C / C # เสมอ ที่กล่าวว่ามีโปรแกรมเมอร์กี่คนที่สมบูรณ์แบบ? ในระดับ JVM Java และไลบรารีจะ "สมบูรณ์แบบมากขึ้น" เสมอเนื่องจากหลักการพัฒนาโอเพ่นซอร์ส ( http://www.infoq.com/news/2012/03/Defects-Open-Source-Commercial )

แก้ไข 2: ข้อมูลชิ้นเล็กชิ้นน้อย: โทรศัพท์ Android P780 รุ่นใหม่ของเลอโนโว - 42 ชั่วโมงคุยกับ 12 ชั่วโมงบน iPhone


1
ฉันขอโต้แย้งว่าคำถามนั้นทำให้การเรียกร้องที่ไม่มีเงื่อนไขครบถ้วนสมบูรณ์เช่น "... โทรศัพท์ Android มีอายุการใช้งานแบตเตอรี่ที่น่าตกใจเมื่อเทียบกับแพลตฟอร์ม / โทรศัพท์อื่น ๆ " เพียงแค่ไม่จริง
— allquixotic

ต้องการเพิ่มว่าลิงก์แรกของคุณคือ IMHO ที่มีคุณภาพน่าสงสัย: ไฟล์มาตรฐานหายไปและผู้แสดงความเห็นไม่เห็นด้วยกับความเห็นของผู้โพสต์ลิงก์ โพสต์นี้ดูเหมือนว่ามีอคติเนื่องจากไม่มีแหล่งที่มาที่ไม่สามารถพิสูจน์ได้และคำแถลงส่วนตัว
— Doktoro Reichard

นักวิจารณ์คนแรกก็ใจดี คำตอบทั้งหมดจะไม่มีอคติหากไม่มีการทดสอบอย่างละเอียด ฉันเห็นด้วยว่าอายุการใช้งานแบตเตอรี่ของโทรศัพท์ Android ค่อนข้างแย่ แต่ก็ไม่ได้เกิดจาก VM อย่างที่หลายคนกล่าวถึง
— Igor Čordaš

ในไม่ช้าข้อมูลทั้งหมดนี้จะล้าสมัยแล้วด้วยการมาถึงของรันไทม์ ART ใน Android
— Mark Lopez

3

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

ที่กล่าวว่าสำหรับงานส่วนใหญ่ฉันคิดว่าค่าโสหุ้ย "เกี่ยวข้องกับพลังงาน" ของการใช้ VM นั้นถูกแคระโดยการพิจารณาอื่น ๆ - สำหรับโปรแกรมส่วนใหญ่การใช้หน้าจอและวิทยุจะใช้พลังงานส่วนใหญ่


คุณพูดถูก AE ที่ใช้องค์ประกอบอินเตอร์เฟซสีดำบนหน้าจอ Oled จะเป็นการประหยัดพลังงานที่ใหญ่กว่าแล้วไปกับ NDK vs SDK ในกรณีส่วนใหญ่
— Igor Čordaš

3

เกี่ยวกับผู้โพสต์อื่น ๆ ฉันเชื่อว่าสิ่งที่สำคัญที่สุดที่นี่ไม่ใช่ว่ามี C / C ++ / Java อยู่ แต่สิ่งที่แอปพลิเคชันกำลังทำอยู่

เนื่องจากการใช้พลังงานแมปโดยตรงกับการประมวลผลฉันจะถามตัวเองว่าโปรแกรมจะประมวลผลอย่างไร

สมมติว่าคุณกำลังเพิ่มตัวเลข สมมติว่าคุณกำลังเพิ่ม 2 กับ 2 ในวงวนไม่สิ้นสุดจนกว่าคุณจะถึง 2.000.000 เกิดคำถามสองข้อ:

  1. มีการใช้งานอย่างไร: เป็น for-loop หรือไม่? มันเป็นวงในขณะที่? (เป็นแฮ็ก Goto / Label หรือไม่)
  2. รหัสถูกปรับให้เหมาะสมอย่างไร

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


0

ใช่.

เครื่องเสมือน 'ทำทุกอย่างสองครั้ง' และไม่จำเป็นต้องมีประสิทธิภาพ ดังนั้นพวกเขาจะใช้พลังงานอย่างน้อยสองเท่าในการประมวลผลคำแนะนำเดียวกับ 'เครื่องจริง' การปรากฏตัวของเครื่องเสมือนทำให้สิ่งต่าง ๆ ช้าลงและใช้พลังงานมากขึ้น โดยทั่วไประบบปฏิบัติการอย่าง iOS และ WIndows จะทำทุกอย่างได้เร็วขึ้นและใช้พลังงานน้อยลง

สิ่งนี้แปลความแตกต่างที่แท้จริงในการเปลี่ยนหน้าจอการโหลดหน้าการนำทางสิ่งต่าง ๆ ขณะนี้ฉันกำลังเปรียบเทียบ Android (VM) และ Windows Phone และแม้จะมีโปรเซสเซอร์ที่ช้ากว่า (1GHz เทียบกับ 1.6GHz) Windows ก็มีประสิทธิภาพสูงกว่า Android ที่ทำงานแบบเดียวกัน

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

เหตุผลทั้งหมดสำหรับเครื่องเสมือนระบบปฏิบัติการพกพาไม่ใช่เหตุผลที่ดีที่จะใช้ระบบปฏิบัติการ คุณเห็นคนที่ซื้อโทรศัพท์ด้วยสถาปัตยกรรมที่พวกเขาชื่นชอบและใช้ Android เพราะพกพาได้หรือไม่? คุณเห็นคนเลิกประสิทธิภาพและความน่าเชื่อถือที่สูงขึ้นและวาง android บนโทรศัพท์ที่ไม่ใช่ android หรือไม่? ผู้คนซื้อโทรศัพท์ Android หรือ Windows Phone หรือ IPhone เป็นต้นการเสียสละประสิทธิภาพในการพกพาในอุปกรณ์ราคาถูกนั้นไม่สามารถทำได้ มันเป็นความคิดที่ดีที่กลายเป็นความล้มเหลว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.