设为首页 加入收藏

TOP

JVM面试和学习中需要注意的部分
2023-07-25 21:26:55 】 浏览:30
Tags:JVM 习中需

在学习jvm的时候许多人处于迷茫的状态,对一些基础的知识反而听过就忘了,这篇笔记是我在学习jvm的时候随手记的一些,适合已经学过或者了解过的小伙伴复习回顾一下,当然知识的覆盖是没有的,主要记录了我觉得容易忘记或者记错的知识点,这些有很多是基石知识,希望大家不要忘记,大家看到就当正好复习一下,对大家的面试可能会有一点小小的帮助

内存结构

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

垃圾回收算法

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

类加载

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

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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇29基于java的在线考试系统设计与.. 下一篇JDK中自带的JVM分析工具

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目