• 4.JVM面试题


    帅地的jvm面试题有点深

    1.运行时常量池和符号引用得看看。运行时常量池是方法区的一部分,运行时常量池存放:编译期生成的各种字面量和符号引用

    2.jdk1.7 字符串常量池从方法区移到了堆中(原来运行时常量池包含字符串常量池),运行时常量池还在方法区中

    3.G1垃圾收集器作用于新生代和老年代

    4.对于byte,short,int,long,char类型的变量,数值在[-128,127]之间,会包装到缓存中(运行时常量池)。在常量池中,相同数值的常量只会保留一份

    5.两个字面量的字符串连接后才可以放入字符串常量池,符号引用类型的字符串连接不会放入常量池

    6.根搜索算法:以一系列GC Roots作为根节点向下搜索,如果哪个对象没有到GC Roots的引用链,那么这个对象就是垃圾对象

    7.

    (1)方法区:异常情况:OOM

    (2)堆:异常情况:OOM

    (3)虚拟机栈:为执行java方法而服务,异常情况:OOM,StackOverFlowError

    (4)本地方法栈:为执行本地方法而服务,异常情况:OOM,StackOverFlowError

    (5)程序计数器:存放的是虚拟机字节码指令的地址。可以看做是线程所执行的字节码指令的行号指示器。次区域是唯一一个不会抛出OOM的区域

        字节码解释器的工作就是:通过改变程序计数器的值来选取下一条需要执行的字节码指令

    8.对象访问定位的两种方式

    (1)句柄:如果使用句柄的话,那么 Java 堆中将会划分出一块内存来作为句柄池,引用中存储的就是对象的句柄地址,而句

    柄中包含了对象实例数据与类型数据各自的具体地址信息

    (2)直接指针:如果使用直接指针访问,那么 Java 堆对象的布局中就必须考虑如何防止访问类型数据的相关信息, reference 中存
    储的直接就是对象的地址

    优缺点:

    (1) 使⽤句柄来访问的最大好处是引用中存储的是稳定的句柄地址,在对象被移动时只会改变句柄中的实例数据指
    针,而引用本身不需要修改;
    (2)使用直接指针访问方式最大的好处就是速度快,它节省了了一次指针定位的时间开销


    9.别标记为垃圾的对象一定会被回收吗

    不一定。一个对象要想被垃圾回收器回收,至少需要两次标记

    第一次标记:如何一个对象在经过根搜索后没有与GC Roots的引用链,会被第一次标记

    第二次标记:第一次标记后会进行一次筛选,没有重新与引用链建立关联的,会被第二次标记

    第二次被标记的对象会被垃圾回收器回收

    10.java中的引用分为4种:强引用,软引用,弱引用,虚引用。引用强度依次递减

    11.为什么要采用分代收集算法?

    根本原因:不同的对象生命周期是不一样的。采用分代收集算法,可以提高垃圾回收效率

    12.双亲委派机制的工作过程

    当一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是将加载请求委托给父类加载器,因此所有的加载请求最终都会到启动类加载器中。只有当父类加载器反馈无法完成这个加载请求时,子类加载器才会尝试自己去加载

    13.String.intern()方法可以看一看

  • 相关阅读:
    [spring]AOP(切面)编程
    [spring]基于注解的spring配置
    [redis]redis五种数据类型和应用场景
    [redis]redis实现分页的方法
    [zookeeper]ZooInspector的使用
    [log4j]SLF4J+log4j的使用
    [zookeeper]依赖jar的问题
    导出word功能,用html代码在word中插入分页符
    jq实现千分位的转换
    oracle 创建表空间及oracle 11g表空间之最大最小
  • 原文地址:https://www.cnblogs.com/midiyu/p/15879742.html
Copyright © 2020-2023  润新知