JVM是什么?

JVM是Java Virtual Machine(Java虚拟机)的缩写,它是一个虚拟的计算机。

  1. **跨平台 **
    Java为什么说是无关平台的编程语言呢?其实就是因为JVM,JAVA语言只需要把代码编译成JVM上可以运行的字节码就行了,JVM在运行的时候会把字节码转换成各个操作系统上可执行的指令,就可实现"一次编译,处处运行"。举个例子,假如你要去英国,但是你不会英语,这时候你就需要找一个既懂中文又懂英文的人来当翻译,JVM就可以比喻成一个翻译官。
    对于JVM的基础了解
  2. 类加载器的分工
    (1)引导类加载器负责加载JAVA_HOME/jre/lib/rt.jar(核心类库)。
    (2)扩展类加载器负责加载JAVA_HOME/jre/lib/ext/(扩展类库)。
    (3)系统类加载器负责加载我们自己写的Java类和main方法类。
    对于JVM的基础了解
  3. JVM的垃圾回收机制(GC)
    (1).如何辨别垃圾?
    引用计数法
    引用堆里的对象,每次引用一次对象就+1,如果对象赋值为null就-1。但是这个算法有一个致命的缺陷,那就是对于循环引用的对象无法进行回收,GC也不会去处理。这种方式实在JDK1.5以后就被淘汰了。
    优点:引用计数法实现起来比较简单,对程序不被长时间打断的实时环境比较有利。
    缺点:需要额外的空间来存储计数器,难以检测出对象之间的循环引用。
    根搜索算法
    设立若干种根对象,当任何一个根对象到某一个对象均不可达时,则认为这个对象是可以被回收的。这个方法解决了循环引用的问题。
    (2).怎么回收垃圾?*
    标记清除算法:*
    找到之后直接清除掉,有一个明显的缺点,内容利用的效率不高,存在这许多内容碎片。
    分段复制算法:
    解决了内存碎片的问题,但是会有大量的对象移动,就会导致JVM的卡顿。
    标记整理算法
    碎片少,是以上两种方式的整合。
    分代收集算法:
    将堆内存划分为新生代、老年代和永久代(元空间)。
    这是因为不同对象存活时间不一致,有些可能只使用一次,使用后就需要回收,而有些对象却会伴随整个程序的生命周期。分代有利于堆不同生命周期的对象进行管理,减少GC次数,提高运行效率。
    新生代(Eden):朝生夕灭的对象(方法的局部变量等)。
    老年代 (survivor):存活得比较久,但还是要死的对象(缓存对象、单例对象等)。
    永久代(Tentred):对象生成后几乎不灭的对象(加载过的类信息)。
    分代收集算法是现在的jvm采用的算法。

相关文章:

  • 2021-09-16
  • 2021-05-24
  • 2022-01-03
  • 2021-11-27
  • 2018-12-09
  • 2021-09-10
  • 2021-11-03
  • 2021-04-01
猜你喜欢
  • 2021-12-01
  • 2021-06-04
  • 2021-04-27
  • 2021-12-13
  • 2021-08-30
  • 2021-06-13
  • 2022-12-23
相关资源
相似解决方案