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.