The Android system runs on the Java virtual machine. As an embedded device, the memory is often very limited. Understanding Android's garbage collection mechanism can effectively prevent memory leaks or OOM problems. This article is an introductory article that will briefly discuss the principles of garbage collection and memory leaks, and will not discuss the underlying mechanism of the Dalvik virtual machine or native-level issues. 1. Basics Before analyzing garbage collection, we need to review the basics of Java and discrete mathematics.
Google I/O 2011: Memory management for Android Apps The orange Object in the figure above is the starting point of the directed graph. Its Shallow heap is 100, and its Retained heap is 100 + 300 = 400. 2. What is Garbage Collection Java GC (Garbage Collection) mechanism is one of the main differences between Java and C++/C. As a Java developer, you generally do not need to write special memory recovery and garbage cleaning code, and you do not need to be as nervous about memory leaks and overflows as C programmers. This is because there is an automatic memory management and garbage cleaning mechanism in the Java virtual machine. In general, this mechanism marks the memory in the virtual machine and determines which memory needs to be recycled. According to a certain recycling strategy, the memory is automatically recycled, and the memory space in the virtual machine is guaranteed to be never stopped (Nerver Stop) to prevent memory leaks and overflows. 3. When is garbage collection needed? For GC, when the programmer creates an object, GC starts to monitor the address, size and usage of the object. Usually GC uses a directed graph to record and manage all objects in the heap, and in this way determines which objects are "reachable" and which objects are "unreachable". When an object is unreachable, that is, when the object is no longer referenced, it will be garbage collected. There are many documents on the Internet that introduce the reachable relationship. As shown in the figure, in the sixth line, o2 changes its pointing direction, and Obj2 no longer references main, that is, they are unreachable, and Obj2 may be recycled in the next GC. developerWorks Java technology 4. What is a memory leak? When you no longer need an instance, but the object is still referenced, preventing it from being garbage collected (Prevent from being bargage collected). This situation is called a memory leak. Below, we will use the translation of How to Leak a Context: Handlers & Inner Classes as an example to introduce a memory leak. Look at the following code
When you finish typing this code, the IDE should remind you
How did it leak?
Reference relationship Now, let's try running the following code
This program is very simple. We can imagine that it should start and then shut down instantly, but is it really shut down? Anyone with a little common sense can see that it sends a Message that will run ten minutes later, which means that the Message will be kept referenced for 10 minutes, resulting in a memory leak of at least 10 minutes. The final correct code is as follows
in conclusion
Finally, let me add a few words about iOS. In the latest versions of OC and Swift, iOS has introduced a new memory management system ARC (auto reference counting). When compiling C code, the compiler automatically adds code to release memory in a timely manner. References http://www.jianshu.com/p/22e73e80e950 http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/ http://stackoverflow.com/a/70358/4016014 http://blog.csdn.net/luoshengyang/article/details/8852432 http://developer.android.com/training/articles/perf-tips.html https://techblog.badoo.com/blog/2014/08/28/android-handler-memory-leaks/ |
<<: 25 New Android Libraries You Definitely Want to Try in Early 2017
>>: Google AI: No one knows how it works
Plastic pollution is changing the global aquatic ...
After checking, the iOS version of WeChat has bee...
iOS 11 eliminates all non-64-bit chip devices, wh...
With the popularity of Douyin live streaming and ...
[[259310]] Facebook is learning from WeChat and i...
Everyone who makes short videos knows about Douyi...
[Editor's Note] As Turing Award winner and ch...
Zhang Yunhui's lecture on "A Lesson in F...
Breakout Academy Online Course Monetization Train...
On December 3, the "3rd China Online Audiovi...
The bell of 2017 has rung. As I am about to enter...
Premier Li Keqiang urged to increase Internet spe...
The development of artificial intelligence (AI) i...
【51CTO translation】The Android Transition framewo...
Friends living in the Yangtze River Basin have al...