Java、Python与PHP的虚拟机异同

2017-08-01  本文已影响393人  青年马土豆

Java、Python与PHP的虚拟机异同

Java-JVM

定义

JVM 执行

JVM 生命周期

JVM结构及内存模型

名词解释:

垃圾回收

判断垃圾回收

  1. 引用计数法:在对象上添加一个引用计数器,每当有一个对象引用它时,计数器加1,当使用完该对象时,计数器减1,计数器值为0的对象表示不可能再被使用。引用计数法实现简单,判定高效,但不能解决对象之间相互引用的问题。

  2. 可达性分析法:通过一系列称为 “GC Roots” 的对象作为起点,从这些节点开始向下搜索,搜索路径称为 “引用链”,以下对象可作为GC Roots:

    • 本地变量表中引用的对象
    • 方法区中静态变量引用的对象
    • 方法区中常量引用的对象
    • Native方法引用的对象

    当一个对象到 GC Roots 没有任何引用链时,意味着该对象可以被回收。

垃圾回收算法

  1. 标记-清除算法
    对待回收的对象进行标记。
    算法缺点:效率问题,标记和清除过程效率都很低;空间问题,收集之后会产生大量的内存碎片,不利于大对象的分配。
  2. 复制算法
    复制算法将可用内存划分成大小相等的两块A和B,每次只使用其中一块,当A的内存用完了,就把存活的对象复制到B,并清空A的内存,不仅提高了标记的效率,因为只需要标记存活的对象,同时也避免了内存碎片的问题,代价是可用内存缩小为原来的一半。
  3. 标记-整理算法
    在老年代中,对象存活率较高,复制算法的效率很低。在标记-整理算法中,标记出所有存活的对象,并移动到一端,然后直接清理边界以外的内存。

参考文章

  1. 清蒸 JVM (一)

  2. Java GC的那些事(上)

  3. Java GC的那些事(下)

Python

PVM

PVM是Python的运行引擎。他通常表现为python系统的一部分。并且他是实际运行脚本的组件。

编译器:将源码编译成运行在虚拟机上执行的opcode(pyc文件),pyc文件是在python虚拟机上执行的一种跨平台字节码。

运行时:虚拟机解释器把opcode(pyc文件)解释成具体机器的机器码,执行。

JVM与PVM

PHP-Zend&HHVM

写在最后

时间匆忙,囫囵吞枣,努力完善。

后端开发离不开Java,python和php,深入学习原理,比较异同,最佳使用。

2017.06.23

上一篇 下一篇

猜你喜欢

热点阅读