栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

暑假 :本周总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

暑假 :本周总结

本周总结,本周主要是对jvm进行了复习吧,其他时间除了练车就是有事,在家的效率还是比较低的,这两天又有事外出了,可能回不了家,在外面的学习时间会更少一点,但是白天也会抓住时间学习的,以下是我复习想的一些问题,有的顺手答出来一点,有的没有写,是因为答案我有的是背出来的,就懒得写结果了,这个问答博客就当作课余没事干的时候我自己看看吧

下周计划:学习以下jvm的工具吧,以及调优

  • 说一下加载器的作用

  • 总结一下类加载器

  • 可以说一下双亲委派模型吗?

  • 使用双亲委派模型的好处有哪些?

    • 避免类的重复加载,也保证了java核心Api不被篡改
  • 不想用双亲委派模型怎么办?怎么破坏?

    • 自定义类加载器要继承classLoad,然后重写loadClass方法
  • GCRoots都可以有哪些?

  • 说一下垃圾收集器的搭配情况

  • 说一下G1垃圾收集器吧

  • 说一下CMS垃圾收集器在手机的时候有几个步骤,每一个步骤都在干什么

  • 说一下类的生命周期

    • 加载,连接(验证,准备,解析),初始化,使用,卸载
  • 说一下类的加载过程

    • 主要是加载,连接,初始化
    • 其中连接包含验证,准备,解析
  • 加载阶段干什么?非数组类和数组类加载区别?

    • 加载阶段一般有三步,第一步:通过该类的全限定名来获取该类的二进制字节流,第二步:将字节流的静态存储结构转化为方法区的运行时动态数据结构,第三步:在内存中生成一个java.lang.class对象,作为方法区这个类的各种数据访问的入口
    • 对于java虚拟机规范中并没有对这三条有明确的规定,就比如说第一条,他没有说是从哪里获取类的字节流文件,比如说可以从zip中获取字节流,最终成为日后jar,war的基础,还有jsp生成的对应的class文件等等,从网络中获取
    • 非数组类型的加载是该阶段可控性比较强的,可以重写loadClass()或者findClass()来控制字节流的获取方式
  • 验证阶段目的是什么?验证阶段都验证哪几个部分,每个部分都验证什么信息?

    • 验证阶段的目的是为了确保class文件中的字节流包含的信息符合java虚拟机规范中的全部约束,以确保这些信息被当作代码在运行时不会对虚拟机自身造成伤害
    • 验证阶段是在类加载阶段中占比较重的一个阶段
    • 验证阶段一般都验证四个部分:class文件格式验证,元数据验证,字节码验证,符号引用验证
    • class文件格式验证:主要验证class文件是否正确,版本号是否能被java虚拟机处理,比如说魔数,还有主次版本号,常量池中是否有不被接受的常量
    • 元数据验证:这个阶段主要对字节码进行语义分析,以确保字节码描述的信息符合java语言规范,他主要有这几个验证点,判断一个类是否有父类除了object,其他类都有父类,一个类的父类是否继承了不能被继承的类(被final修饰),非抽象类是否全部实现了其父类或父接口的所有方法
    • 字节码验证:这个阶段主要是通过数据流分析和控制流分析,确保程序语义是合法的符合逻辑的,这个验证点主要是,保证任意时刻操作数栈的数据类型和指令代码序列能够配合工作
    • 符号引用验证:确保解析正常运行本阶段通常校验以下内容:能否通过字符串描述的全限定名称找到该类,方法中是否存在字段描述符以及简单名称
  • 准备阶段的目的是什么?分配的话在哪里分配?

    • 准备阶段主要对类变量(静态变量,不是实例变量,实例变量在对象实例化的时候随着对象一块分配在堆中)进行分配内存和设置初始值
  • 准备阶段需要注意什么?

    • 初始化的是静态变量(类变量,不是实例变量,实例变量在实例化的时候随着对象一起分配在堆中)
  • 基本数据类型的零值有哪些?说出五个

    • char:‘u0000’
    • int: 0
    • long :0l
  • 请说一下解析阶段针对什么解析?

    • 解析阶段是java虚拟机将常量池内符号引用替换为直接引用的阶段,主要对接口或类,字段,接口方法,类方法,方法类型,方法句柄,调用限定符
  • 说一下符号引用和直接引用的区别

    • 符号引用是class文件中的常量池中的,它是由任意的字面量组成的,他必须在加载解析的时候变成直接引用
    • 直接引用是指向该目标的指针、相对偏移量,或一个间接定位到该系统的句柄
    • 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,也就是得到类或者字段、方法在内存中的指针或者偏移量。
  • 请说一下初始化阶段执行什么方法,都有哪些情况需要初始化?

    • 遇到new,getstatic,putstatic,invokestatic指令的时候
    • 反射的时候
    • 父类未被加载会先加载父类,接口不同,只有在用到父接口的时候才会加载
    • main
    • default
  • 卸载类的适用场景是什么?哪些类可以被回收?
  • 卸载类需要满足什么条件?

    • 该类中的所有实例都已经被GC也就是说,堆中不存在该类中的实例
    • 该类没有在其他地方被引用
    • 该类的加载器的实例被gc
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号