Open kukyxs opened 5 years ago
Android虚拟机:即DVM(Dalvik Virtual Machine),为啥不叫AVM? JAVA虚拟机:即JVM(Java Virtual Machine)。 Dalvik 是 Google 公司自己设计用于 Android 平台的 Java虚拟机,每一个Android 应用程序都拥有一个独立的Dalvik 虚拟机实例,应用程序都在它自己的进程中运行。而每一个 Dalvik 都是在Linux 中的一个进程。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。 dvm和jvm区别: 1.执行的字节码不一样 dvm执行的是.dex 文件,而jvm 执行的是.class。 .jar文件里面包含多个.class文件,每个.class文件里面包含了该类的头信息(如编译版本)、常量池、类信息、域、方法、属性等等,当JVM加载该.jar文件的时候,会加载里面的所有的.class文件,这样会很慢。 Android 工程编译后的所有.class字节码会被dex工具抽取到一个.dex文件中。 .class文件存在很多的冗余信息,dex工具会去除冗余信息减少了整体文件尺寸,并把所有的.class文件整合到.dex文件中。减少了I/O 操作,提高了类的查找速度。
jvm: java->class->jar dvm: java->class->dex
2.基于的架构不一样 Dalvik 基于寄存器,寄存器是CPU上面的一块存储空间;而 JVM 基于栈,栈是内存上面的一段连续的存储空间。寄存器存取速度比栈快的多,dvm可以根据硬件实现最大的优化,比较适合移动设备。
3.Dalvik 和 Java 运行环境不同 Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。Dalvik虚拟机有自己的 bytecode,并非使用 Java bytecode。 JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境。我们用Java编写的软件可以运行在任何的操作系统上,这个特性称为Java语言的跨平台性。该特性是由JVM实现的,我们编写的程序运行在JVM上,而JVM运行在操作系统上。 JVM本身不具备跨平台功能的,每个操作系统都有不同版本的虚拟机
4.Dalvik 和 Java 的SDK不同
其他: Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。 Android有一个特殊的虚拟机进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域。
参考:(https://blog.csdn.net/mr_zhaojy/article/details/52776254) JVM(https://blog.csdn.net/qq_41701956/article/details/81664921)
Android虚拟机:即DVM(Dalvik Virtual Machine),为啥不叫AVM? JAVA虚拟机:即JVM(Java Virtual Machine)。 Dalvik 是 Google 公司自己设计用于 Android 平台的 Java虚拟机,每一个Android 应用程序都拥有一个独立的Dalvik 虚拟机实例,应用程序都在它自己的进程中运行。而每一个 Dalvik 都是在Linux 中的一个进程。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。 dvm和jvm区别: 1.执行的字节码不一样 dvm执行的是.dex 文件,而jvm 执行的是.class。 .jar文件里面包含多个.class文件,每个.class文件里面包含了该类的头信息(如编译版本)、常量池、类信息、域、方法、属性等等,当JVM加载该.jar文件的时候,会加载里面的所有的.class文件,这样会很慢。 Android 工程编译后的所有.class字节码会被dex工具抽取到一个.dex文件中。 .class文件存在很多的冗余信息,dex工具会去除冗余信息减少了整体文件尺寸,并把所有的.class文件整合到.dex文件中。减少了I/O 操作,提高了类的查找速度。
2.基于的架构不一样 Dalvik 基于寄存器,寄存器是CPU上面的一块存储空间;而 JVM 基于栈,栈是内存上面的一段连续的存储空间。寄存器存取速度比栈快的多,dvm可以根据硬件实现最大的优化,比较适合移动设备。
3.Dalvik 和 Java 运行环境不同 Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。Dalvik虚拟机有自己的 bytecode,并非使用 Java bytecode。 JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境。我们用Java编写的软件可以运行在任何的操作系统上,这个特性称为Java语言的跨平台性。该特性是由JVM实现的,我们编写的程序运行在JVM上,而JVM运行在操作系统上。 JVM本身不具备跨平台功能的,每个操作系统都有不同版本的虚拟机
4.Dalvik 和 Java 的SDK不同
其他: Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。 Android有一个特殊的虚拟机进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域。
参考:(https://blog.csdn.net/mr_zhaojy/article/details/52776254) JVM(https://blog.csdn.net/qq_41701956/article/details/81664921)