【朝花夕拾】内存拾遗

       笔者从事Anroid开发有些年头了,深知掌握Anroid内存方面的知识的必要性,这是一个程序员必须修炼的内功。在面试中,它是面试官的挚爱,在工作中,它是代码质量的拦路虎,可见其重要性。在团队中,内存优化的工作又往往由经验丰富的老师傅来完成,可见要做好内存优化,不是一件容易的事情。

       这方面涉及的知识比较多,分析起来也有一定的复杂性,笔者将通过一系列的文章来进行整理,将主要包括JVM,java内存管理,java垃圾回收,android内存管理,android内存优化技巧,android内存泄漏,常用内存分析工具等。由于笔者水平和经验有限,有不当之处,请不吝赐教。

       该系列将由以下文章构成,每篇文章针对某一个点进行整理,当然,根据工作中遇到的实际情况,或深或浅,或繁或简。

       【朝花夕拾】内存拾遗(一)—— 目录

       【朝花夕拾】内存拾遗(二)—— JVM

       【朝花夕拾】内存拾遗(三)—— java内存管理

       【朝花夕拾】内存拾遗(四)—— java内存回收

       【朝花夕拾】内存拾遗(五)—— Android内存管理

       【朝花夕拾】内存拾遗(六)—— Android内存优化技巧

       【朝花夕拾】内存拾遗(七)—— Android内存泄漏

       【朝花夕拾】内存拾遗(八)—— Anroid常用内存分析工具

       【朝花夕拾】内存拾遗(九)—— 总结

二、JVM

        之所以在讲内存之前先介绍JVM,是因为JVM就像盘古一样开天辟地,在机器上开辟了一个虚拟的空间,然后才有了java生存的土壤。改系列文章的主角——内存就是JVM中的一部分。

       1) 什么是JVM?

        咱们这里借鉴百度百科的解释:

        JVM是Java Virtual Machine 的缩写,即Java虚拟机,它是一种用于计算设备的规范,通过在实际的计算机上仿真模拟各种计算机功能来实现,可以简单理解为,它是一个在实际计算机中虚构出来的寄生计算机。Java源文件经过编译器编译成.class文件(字节码文件)后,由JVM来执行。JVM拥有一套支持java字节码文件(.class文件)执行的环境,可以将.class文件解释成具体平台上的机器指令并执行。Java程序只需要生成.class文件,即可以在任何装有JVM的设备上运行,而不需要理会具体操作系统平台相关的信息。此时的JVM就像一个翻译官一样连接连接着.class文件和系统平台。Java的这个特性叫做平台无关性,实现了“一次编译,到处运行”,JVM就是实现Java这个功能的大功臣。

       2) JDK,JRE,JRM是什么关系?

                                                                          

             JDK:Java Development Kit 的缩写,即 Java开发工具包,提供了开发java程序所需要的基本条件。上图为JDK的安装包,其中红色边框中

                     bin:最主要包含了编辑器javac.exe,功能是将java源文件编译为.class文件。

                     include:包含了Java和JVM交互用的头文件

                     lib:包含了ava开发所需的类库

                     jre:为Java运行环境

              JRE:Java Runtime Environment的缩写,即Java运行环境,下图为JRE文件夹的内容。注意,JRE是运行环境,而不是开发环境。

                  

                    bin:可以理解为JVM,其中javaw.exe和java.exe用于执行.class文件

                    lib:提供了JVM执行所需要的库

               JVM:执行.class文件。

               这三者的关系可以通过下图(摘自某网站)来理解:JDK包含了JRE,JRE又包含了JVM。图中提到的Java开发工具,集成有类库和编译工具,只需关联jre即可。

                JDK、JRE、JVM三者的区别与联系 - 以德糊人 - ——挨踢民工 Playkid——     

猜你喜欢

转载自www.cnblogs.com/andy-songwei/p/9291186.html