Android hay iOS ngốn RAM hơn?

Bạn thắc mắc Android hay iOS ngốn RAM hơn? Cứ xem bài này sẽ rõ!

“Sao Apple bán điện thoại iPhone nào cũng có RAM ít hơn Android, vậy mà nó vẫn chạy mượt ít khi chậm lag?” Đây được xem là câu hỏi kinh điển của người dùng mới xài smartphone. Liệu có phải ứng dụng Android ngốn nhiều bộ nhớ hơn iOS?

Để trả lời câu hỏi có thâm niên gần 10 năm này, cây viết Gary Sims đến từ trang công nghệ nổi tiếng Android Authority đã diễn giải chi tiết như sau:

Chắc hiện có nhiều bạn chưa biết RAM là gì?

RAM là từ viết tắt của Random Access Memory (bộ nhớ truy cập ngẫu nhiên), là phần bộ nhớ được sử dụng bởi CPU. RAM nó khác hoàn toàn với bộ nhớ lưu trữ trong máy – đôi khi cũng được gọi tắt là “bộ nhớ” do nó sử dụng bộ nhớ flash.

Dưới đây là bảng so sánh dung lượng RAM của Apple iPhone với các dòng smartphone Android:

Bảng so sánh dung lượng RAM của iPhone với các dòng smartphone Android

Bấm vô hình để xem kích thước lớn hơn

Như các bạn thấy đó, iPhone thường có dung lượng RAM ít hơn những chiếc smartphone Android cùng phân khúc, ngoại trừ Nexus 5X có cùng 2G RAM với iPhone 6s.

Theo đó, Gary Sims đã sử dụng Nexus 5X và iPhone 7 đều có 2 GB RAM để làm bài kiểm tra bên dưới.

RAM trống là gì?

Bên cạnh dung lượng RAM, yếu tố quan trọng thứ hai đó chính là cách mà thiết bị đó (PC Desktop, laptop, smartphone, tablet) quản lý RAM có hiệu quả hay không. Trước đây, máy tính chỉ có một đoạn bộ nhớ RAM cho hệ điều hành và một phần RAM khác cho việc thực thi các chương trình và dữ liệu.

Tuy nhiên, thời thế đã thay đổi và đa nhiệm lên ngôi, cùng sự ra đời của bộ nhớ RAM ảo (Virtual Memory – VM). Chúng ta không bàn sâu ở vấn đề này, nhưng về cơ bản mỗi chương trình (ứng dụng) sẽ được chạy trên một không gian địa chỉ ảo riêng.

Điều này có nghĩa là trên iOS và Android, bên cạnh bộ nhớ RAM cho hệ điều hành, cũng sẽ có những phần của RAM (thường gọi là các page) được dành cho mỗi ứng dụng. Bất kỳ đoạn RAM nào chưa bị chiếm dụng sẽ được xem là trống. Tuy nhiên, việc có RAM trống hay RAM chưa bị chiếm dụng lại là điều không hiệu quả.

Hệ điều hành có thể lấy một phần RAM trống để làm bộ nhớ đệm, giúp các tác vụ được khởi động nhanh hơn. Nhưng các ứng dụng cũng cần RAM để chạy, vì vậy nếu một ứng dụng chiếm nhiều RAM hơn, bộ nhớ đệm có thể bị loại bỏ để phần bộ nhớ RAM đó được chuyển sang cho ứng dụng.

Từ đây có thể thấy, một hệ điều hành tốt hầu như RAM trống không còn bao nhiêu, nhưng sẽ luôn có “available RAM” (RAM có sẵn), lượng RAM đang được dùng nhưng có thể tái sử dụng cho mục đích khác ngay lập tức.

Tóm lại, RAM trống không hữu ích bằng RAM có sẵn.

Không phải cứ cố gắng tăng RAM trống là thiết bị sẽ chạy mượt mà

Không phải cứ cố gắng tăng RAM trống là thiết bị sẽ chạy mượt mà. Điển hình như iPhone 7 (ảnh phải) chỉ cần Free tầm 5% là đủ để chạy phà phà

Vậy có phải Android sử dụng nhiều bộ nhớ RAM hơn iOS? Để giải đáp thắc mắc này, chúng ta có thể bắt đầu từ việc khởi động lại một chiếc Nexus 5X và iPhone 7. Sau khi khởi động lại, thiết bị iOS có tầm 730 MB RAM có sẵn, trong khi thiết bị Android là 840 MB RAM có sẵn. Đồng nghĩa với việc Android sử dụng bộ nhớ RAM ít hơn iOS khoảng 100 MB!

Lượng RAM thực được sử dụng

Các bạn nên làm rõ vấn đề này: RAM trống không có nghĩa là RAM có sẵn. Bên cạnh đó, cũng có sự khác biệt giữa kích thước ảo và kích thước thực của một chương trình.

Chẳng hạn như một ứng dụng yêu cầu cấp 1 MB bộ nhớ để nó có thể tải một hình ảnh từ ổ đĩa. Tại thời điểm ứng dụng yêu cầu bộ nhớ, kích thước ảo của ứng dụng sẽ tăng lên, nhưng hệ điều hành chưa thực sự cung cấp cho ứng dụng đó bất kỳ bộ nhớ RAM vật lý nào.

Vì vậy, lượng RAM thực mà ứng dụng đó sử dụng không tăng lên. Nhưng khi ứng dụng thực sự đọc file đó và bắt đầu ghi vào bộ nhớ RAM, hệ điều hành (OS) mới cấp cho nó một phần RAM thực. Nếu ứng dụng chỉ sử dụng một nửa lượng RAM yêu cầu, OS có thể sẽ không trao cho nó toàn bộ 1 MB bộ nhớ RAM thực, mà ít hơn con số đó.

Lượng RAM thực mà một ứng dụng chiếm được gọi là Resident Set Size (RSS), và nó được xem là thước đo hữu ích cho việc một ứng dụng cụ thể cần bao nhiêu RAM để chạy. Sử dụng nhiều công cụ phát triển khác nhau trên Android và iOS, bạn có thể biết được các ứng dụng đang chạy cùng với kích thước lưu trú của nó.

Tựa game Star Wars: Force Arena ngốn khoảng 254 MB RAM thực
Tựa game Star Wars: Force Arena “ngốn” khoảng 254 MB RAM thực

Để thử nghiệm xem liệu ứng dụng Android có thực sự ngốn bộ nhớ RAM hơn iOS, Gary Sims đã thử cài đặt một số game và ứng dụng công việc để xác định RSS của ứng dụng đó khi chạy là bao nhiêu.

Để đảm bảo ứng dụng và game thực sự đang chạy, ông đã lả lướt trên màn hình để dẫn con gà qua đường (game Crossy Road), rồi chỉnh sửa một vài từ trong ứng dụng Microsoft Word. Và dưới đây là kết quả:

Bảng so sánh RSS giữa các ứng dụng, game Android và iOS
Bảng so sánh RSS giữa các ứng dụng, game trên Android và iOS

Nhìn vào bảng so sánh RSS phía trên cho thấy kết quả trả về khá khác nhau. Trong khi tựa game Crossy Road trên Android sử dụng đến 383 MB bộ nhớ RAM, thì iOS chỉ dừng lại ở mức 308 MB mà thôi.

Nhưng ngược lại, trò chơi Temple Run 2 chỉ sử dụng 211 MB bộ nhớ RAM trên Android, còn iOS lên đến 364 MB. Nhìn chung các ứng dụng Android có xu hướng sử dụng nhiều bộ nhớ RAM hơn iOS khoảng 6%, tuy nhiên kích thước các ứng dụng Android lại chưa bằng một nửa các ứng dụng iOS.

Như đã thông tin phía trên, cả iPhone 7 và Nexus 5X đều sở hữu hơn 700 MB RAM có sẵn. Cho nên, việc khởi chạy các ứng dụng, game như Crossy Road, Temple Run 2,… sẽ luôn trơn tru và ổn định.

RSS của Temple Run 2

RSS của Temple Run 2 chạy trên iPhone 7 (bấm vô hình để xem kích thước lớn hơn)

Bối cảnh không Foreground

Phương pháp đo bộ nhớ RSS ở trên mới chỉ dành cho các ứng dụng foreground (tạm dịch: Tiến trình nổi bật, hoặc chạy nổi), các ứng dụng đang chạy và đang tương tác với người dùng. Nhưng hiện giờ trên cả iOS và Android, bạn đã có thể rời khỏi một ứng dụng hiện tại để chạy một ứng dụng khác và sau đó quay trở lại ứng dụng đó.

Khi bạn rời khỏi nó, ứng dụng đó chuyển từ ứng dụng chạy nổi thành một ứng dụng chạy ngầm/ nền (background), và nó lại được xử lý rất khác biệt so với ứng dụng chạy nổi.

Cụ thể hơn, ứng dụng chạy ngầm không xuất hiện, cũng không thực hiện vai trò dễ nhận ra (như phát nhạc), chúng không ảnh hưởng đến trải nghiệm sử dụng. Tại một thời điểm, có rất nhiều background process đang chạy và bạn có thể xem chúng là những ứng dụng đang “tạm dừng”.

Background process vẫn sử dụng RAM, cho phép bạn nhanh chóng chuyển đổi trở lại nhưng không sử dụng thêm tài nguyên phần cứng nào khác.

Ví dụ, đang kiểm tra Gmail và sau đó bạn bấm phím Home để trở lại màn hình chính, Gmail lúc này sẽ trở thành background process và khi mở lại, Gmail vẫn hiển thị nội dung như lúc bạn rời đi.

Đó là vấn đề của các ứng dụng chiếm dụng ít bộ nhớ RSS, liệu điều gì sẽ xảy ra với các ứng dụng lớn hơn, chiếm nhiều bộ nhớ RAM hơn?

Nếu bạn đang sử dụng Microsoft Word và chuyển sang chơi Crossy Road, sau đó lại quay trở lại dùng Word và lại chuyển sang chơi Temple Run 2. Tính theo kích thước RSS ở trên, thiết bị của bạn sẽ cần hơn 750 MB bộ nhớ RAM có sẵn để chạy nổi cả 3 ứng dụng này.

Trình đa nhiệm của Android và iOS (bên phải)

Trình đa nhiệm của Android và iOS (bên phải)

Tuy nhiên, bộ nhớ RAM có sẵn trên iPhone 7 và Nexus 5X sau khi khởi động lại máy chỉ có 700 MB. Vậy khi lượng bộ nhớ cần để giữ các ứng dụng chạy ngầm và khởi động ứng dụng mới lớn hơn lượng RAM có sẵn, điều gì sẽ xảy ra?

Ưu tiên của hệ điều hành là khởi động ứng dụng mới và chạy nó, nhưng khi không có đủ bộ nhớ RAM có sẵn thì chuyện gì sẽ xảy ra? Nếu trên PC desktop hay máy chủ, điều thường thấy là OS sẽ sử dụng ổ đĩa cứng để lưu trữ tạm thời các khu vực bộ nhớ bị chiếm dụng bởi ứng dụng ngầm. Đây cũng chính là kỹ thuật swapping, kỹ thuật lưu trữ tạm các ứng dụng trên bộ nhớ hoán đổi.

Trong khi đó, Android không sử dụng cách này, bởi vì tốc độ ghi của bộ nhớ flash khá chậm, cộng thêm với nguy hiểm từ việc gây ra hao mòn bộ nhớ flash. Vì vậy, Android và iOS cần tìm đến một giải pháp khác.

Một cách tiếp cận được Android sử dụng là kỹ thuật hoán đổi nén (compressed swapping). Các khu vực bộ nhớ thay vì được ghi tạm trên ổ đĩa, chúng sẽ được nén và lưu trữ trong RAM. Không gian tiết kiệm được do nén dữ liệu sẽ trở thành RAM có sẵn. Một kỹ thuật tương tự cũng được sử dụng trên MacOS từ phiên bản OS X 10.9 Mavericks.

Song, vấn đề của việc nén dữ liệu là nó không có một tỷ số cố định. Nếu các dữ liệu ở dạng văn bản, tỷ số nén sẽ rất cao và lượng RAM mới có sẵn cũng sẽ cao. Tuy nhiên, với những dữ liệu đã được nén như một file ảnh JPEG, tỷ số nén sẽ thấp. Bên cạnh đó, việc nén dữ liệu cũng ảnh hưởng ít nhiều đến chu kỳ xung nhịp CPU.

Ở trường hợp OS không thể thu hồi được đủ bộ nhớ RAM có sẵn, nó không còn cách nào khác ngoài tắt hẳn ứng dụng đó. Bằng thuật toán của mình, OS sẽ xác định ứng dụng chạy ngầm nào cần loại bỏ và thông báo để ứng dụng đó lưu lại trạng thái của mình và chuẩn bị bị đóng.

Khi ứng dụng đó được khởi động lại, nó sẽ xem xét trạng thái thông tin và tải lại các bit dữ liệu và thiết lập mọi thứ như cũ, tuy nhiên cách làm này sẽ mất thời gian hơn so với chuyển đổi ứng dụng đã có sẵn trên bộ nhớ RAM.

Trên Nexus 5X, Gary Sims khởi động và chuyển đổi qua lại giữa hai tựa game Crossy Road và Subway Sufers, mà không gặp bất kỳ trở ngại nào. Nhưng khi chạy thêm game thứ 3 là Temple Run 2, cả 2 game trước đó đều được đưa về trạng thái “dưỡng sức”, do hụt RAM.

Hệ điều hành iOS cũng sử dụng kỹ thuật loại bỏ ứng dụng tương tự như Android, nhưng dường như iOS còn có những thủ thuật khác. Cho dù cũng phải tắt các ứng dụng tuy nhiên iOS không phải thường xuyên làm vậy như Android. Chắc do iOS đã tìm ra một cách nào đó để giảm kích thước RSS mà không phải tắt ứng dụng đó.

RSS của Crossy Road khi chạy ngầm trên iPhone 7

RSS của Crossy Road khi chạy ngầm trên iPhone 7 (bấm vô hình để xem kích thước lớn hơn)

Từ các kết quả phía trên cho thấy, Crossy Road chiếm đến 308 MB bộ nhớ RAM khi khởi động, nhưng khi được chuyển sang chạy ngầm, iOS đã nén RSS của game này xuống còn chưa đến 10 MB. Tuy nhiên, Crossy Road không bị tắt và bạn có thể chuyển sang trò chơi này gần như ngay lập tức, mà không phải tải lại.

Khi ở tiến trình foreground, RSS của game tăng lên nhanh chóng đến hơn 100 MB, thậm chí đến 200 MB, nhưng điều thú vị là nó không bao giờ chạm được tới giới hạn 308 MB của đợt tải ban đầu.

Chốt lại, với dung lượng RAM 2 GB trên iPhone 7, bạn có thể chạy hai tựa game cùng lúc như trên Android, và thậm chí kiêm luôn game thứ 3 mà không bị tắt 1 trong 2 game trước đó.

Về phía Apple, hãng không tiết lộ thông tin về giải pháp nén bên trong của iOS. Liệu có giống với cơ chế nén như trên MacOS? Dù sao kỹ thuật xử lý bộ nhớ của iOS cũng rất ấn tượng.

Tóm gọn cho… những bạn chán đọc

Các ứng dụng trên iOS không sử dụng ít bộ nhớ hơn Android và ngược lại, nhưng iOS có “tuyệt chiêu” hay hơn để đối phó với các ứng dụng chạy ngầm và tái sử dụng bộ nhớ.

Nhìn chung, các ứng dụng Android khi chạy ngầm “ngốn” RAM tương đương lúc chạy nổi. Trong khi đó, trên iOS, các ứng dụng chạy ngầm chiếm dụng ít bộ nhớ hơn, nhưng hệ điều hành vẫn đưa cho nó vừa đủ bộ nhớ để ứng dụng có thể chuyển sang chạy nổi gần như ngay lập tức.

Nhưng kể từ khi Apple chuyển sang hỗ trợ đa nhiệm Split View thì thế cuộc đã trở nên khác hẳn. Với hai ứng dụng chạy song song với nhau, không ứng dụng nào có thể giảm kích thước RSS. Do các ứng dụng iOS và Android sử dụng bộ nhớ gần tương đương nhau, những chiếc iPad với 2 GB RAM (iPad Air 2 và iPad Mini 4) thực sự là không đủ.

Bởi thế, các OEM (nhà sản xuất thiết bị gốc) thường trang bị cho thiết bị Android dung lượng RAM cao hơn để giải quyết vấn đề ứng dụng chạy nền. Đây là giải pháp “chuẩn không cần chỉnh” khi mà giá RAM hiện nay rẻ hơn nhiều so với mấy năm trước. Hy vọng, trong tương lai, Android sẽ chiêm nghiệp ra được giải pháp xử lý ứng dụng chạy ngầm tốt tương tự hoặc hơn iOS.

Trả lời