Android Art 虚拟机 GC 机制之 java 部落的崛起

本文介绍了Android Art虚拟机的GC机制,强调了理解Linux内存管理的重要性。文章从Java对象的创建入手,探讨了Android应用程序内存分配与释放的背景,解释了为何需要GC。文章还简要介绍了Java虚拟机,尤其是Android系统中的dalvik和art虚拟机。通过类比故事,阐述了Java虚拟机如何在Android系统中运行和管理Java程序的内存,以及zygote进程在其中的作用。
摘要由CSDN通过智能技术生成

前言

  在正式研究 android art 虚拟机的GC机制之前,必须要先了解 linux 的内存管理,是的,只需要了解,不必深入,毕竟 android 系统是基于 linux 系统开发出来的移动操作系统,而GC机制当然也是基于 linux 系统的内存管理开发出来的用户态内存回收进制。除此之后,还要有一定的 linux 系统进程管理的基础,在深入探究之前可自行先复习一下 linux 系统的进程管理和内存管理,加固基础知识,在后期的研究会有事半功倍的效果,否则会不知所云,导致越到后面越没兴趣,最后放弃 android art 虚拟机的GC机制的学习。
  现在行业内也有不少相关的文章是分析 android art 虚拟机的内存回收机制的,有些也写得不错,比如老罗的ART运行时一系列的文章,结合源码分析其原理,不过从头看一次下来,能记住并且搞懂的内容还是比较少的。本文是只针对整个GC机制从浅到深系统地整理一次,包括GC机制所涉及到的虚拟机相关知识,对比 linux 系统的进行系统整理,使得读者更好理解。
  本文只做知识分享,给广大的想要深入理解 GC 机制的开发者提供前车之鉴,带大伙入个门,少走弯路,最后也感谢老罗的分享,在细节上分析得很好。
  给读者的个人建议:最好是在深入 art 虚拟机的源码之前先阅读完本篇文章,对他有个大概的理论了解,否则会非常痛苦。

介绍

  Android GC 的全称是 Android Gabage Collection,顾名思义是安卓系统的垃圾收集,为什么会有垃圾收集?众所周知,Android 应用程序大部分都是基于 java 语言开发的,在编写应用程序时不需要对对象进行内存释放的操作,通常在 new 一个对象后,当不需要使用时只需要把该对象的引用重新赋值为 Null 就可以了。这时 GC 就有存在的价值了,该对象的真正内存释放是在 GC 过程中释放掉了,不需要应用程序开发者操心。这就是 java 语言的核心之一,让开发者有更多的精力去关注应用逻辑,而并不需要与 C/C++ 那样考虑因内存没有释放导致内存泄漏的问题。
  但是当把对象的引用重新赋值为 Null 时,并不会立即触发 GC 释放该对象的内存,那么,是什么时候把对象释放掉的呢?这个问题会等阅读完整篇文章后,你自然就有答案了。请跟随我的脚步耐心阅读下去。

1、java 对象的创建

  要想清楚知道GC是如何工作的,则必须先知道对象是如何创建的?java 对象在 linux 系统中是以什么形状存在的?
  首先,请读者先以了解到的 linux 系统知识想像,或者猜测一下 Android 系统是如何在 new 一个对象时,为该对象分配内存的?如果你猜到最终是通过 malloc 函数分配一块内存的话,说明你的 linux 系统知识很扎实; 如果你猜到最终是通过 mmap 函数分配内存的话,说明你是 linux 高手。我们先不讨论哪种是正确的,我们先回顾一下 linux 应用程序的内存分布,毕竟 Android 应用程序也是跑在 linux 系统之上的,Android 应用程序的内存分布同样有 linux 应用程序的特性。如下图所示,是从教科书上截下来的。
  这里写图片描述
  Android 应用程序在启动运行之后,其4G的内存分布空间与 linux 应用程序基本一样,有代码段、数据段、和堆栈区域。与 linux 应用程序的唯一区别是,Android 应用程序是运行在 java 虚拟机之上的,如果你把 Android 应用程序与 java 虚拟机看作整体,其本质就是一个 linux 应用程序。好了,在这里开始多出了一个 java 虚拟机。下面先介绍一下 java 虚拟机。

1.1、java 虚拟机

  目前 Android 系统中的 java 虚拟机有两个,一个是dalvik,另一个是 art,在 Android 4.4 之后的版本都是使用 art 作为 java 虚拟机。从网络上搜索 java 虚拟机,就会有大量的介绍,这里为了加深印象,我自己总结了下什么是 java 虚拟机,它

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值