美文网首页JVM
问题精选-JVM

问题精选-JVM

作者: AC编程 | 来源:发表于2021-02-27 09:23 被阅读0次

    一、内存模型以及分区,需要详细到每个区放什么

    JVM 分为堆区、栈区、方法区、本地方法栈、程序计数器

    • 方法区:主要是存储类信息,常量池(static 常量和 static 变量),编译后的代码(字节码)等数据

    • 堆:初始化的对象,成员变量 (那种非 static 的变量),所有的对象实例和数组都要在堆上分配

    • 栈:栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操作数栈,方法出口等信息,局部变量表存放的是 8 大基础类型加上一个引用类型,所以还是一个指向地址的指针。

    • 本地方法栈:主要为 Native 方法服务

    • 程序计数器:记录当前线程执行的行号

    二、GC 的两种判定方法

    引用计数法:指的是如果某个地方引用了这个对象就+1,如果失效了就-1,当为 0 就会回收,但是JVM 没有用这种方式,因为无法判定相互循环引用(A 引用 B,B 引用 A)的情况。

    可达性算法(引用链法):通过一种 GC ROOT 的对象来判断,如果有一条链能够到达 GC ROOT 就说明不需要回收,不能到达 GC ROOT 就说明可以回收。

    三、简述 Java 垃圾回收机制

    在 Java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫描那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。

    相关文章

      网友评论

        本文标题:问题精选-JVM

        本文链接:https://www.haomeiwen.com/subject/nwnkxltx.html