JVM面试和学习中需要注意的部分

博客 分享
0 176
张三
张三 2023-05-08 15:54:54
悬赏:0 积分 收藏

JVM面试和学习中需要注意的部分

内存结构

  • 1.方法区用来存储类加载的数据,例如类的名称,方法入口
  • 2.JVM虚拟机栈用于存储线程,包括局部变量和方法参数
  • 3.堆内存用来存储对象
  • 4.方法区的规范实现:永久代和元空间
  • 5.方法区 JVM栈 堆 都会发生内存溢出的问题 程序计数器不会
  • 6.程序计数器用来存储程序运行到哪里 因为线程是不断切换的

垃圾回收算法

  • 标记清除算法:会产生大量内存碎片,很多虚拟机不再使用
  • 标记整理算法:适用于老年代的垃圾回收,老年代的无法被回收的对象多,需要被回收的垃圾少,标记整理的效率高
  • 标记复制算法:适用于新生代的垃圾回收,无法被回收的对象少,标记复制效率高
  • 新生代的垃圾回收:在对新生代进行垃圾回收时,会标记伊甸园区中的被引用的对象将其复制到幸存区的to中,然后将伊甸园的所有对象回收,from和to交换位置,如果一个对象经常被引用,到达一个次数后会晋升老年代
  • 新生代老年代差别:新生代可以频繁的回收,速度快 老年代应尽量避免,时间较长

类加载

  • 1.类的字节码文件保存在方法区,类名.class即类对象保存在堆内存中
  • 2.静态变量属于类,随着类的加载而加载,普通成员变量属于实例对象
  • 3.final修饰的变量在加载链接阶段就已经赋值,而在此阶段静态变量只被分配了空间,没有赋值,静态变量的赋值是在初始化阶段完成的
  • 4.在类的初始化阶段,静态代码块和静态变量的赋值是在一个方法中完成的
  • 5.类的加载和初始化都是懒惰的,非必要不加载,例如访问普通成员变量

Spring框架Spring框架

Spring_refresh

  • 1.Applicationcontext 是beanfactory 衍生来的用于管理bean
  • 2.spring容器启动时会创建IOC容器applicationcontext,创建容器时会调用refresh方法,通过这个方法完成bean的创建和初始化
  • 3.Environment 主要用于解析@value注解中的${},#{}
  • 4.applicationcontext内部仍借用了beanfactory的功能
  • 5.Beanfactory 创建和管理bean并不是一瞬间的,需要借助beandefinition,BeanDefinition来源多种多样主要有XML,配置类,组件扫描三种
  • 6.通过@configuration注解把一个类声明为配置类,spring会管理配置类,但是beanfactory无法检测到配置类中的@bean注解,这时需要一个后处理器postprocess 帮助beanfinition识别@bean
  • 7.通过@component 或者其他注解 将一个类声明为受spring管理的bean spring会通过组件扫描的方式获取这个bean
  • 8.Bean的后处理器 用于解析注解例如@Autowired @Resource@Value
  • 9.Refresh完成的最后会将beanfinitionmap中的bean放到singletonobjects单例池中,对象创建有三个不同阶段,每个阶段都有不同的bean后处理器参与进来

Spring_bean

1.bean的生命周期 通过refresh方法可以获取singleton中的单例对象,通过getbean方法获取bean 多例对象需要手动getbean
2.依赖注入的优先级@autowired最低 其次是按名称匹配AUTOWIRE_BY_NAME 优先级最高的是精确指定注入bean

posted @ 2023-05-08 15:32  音风水  阅读(0)  评论(0编辑  收藏  举报
回帖
    张三

    张三 (王者 段位)

    1111 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员