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

原文链接:https://www.cnblogs.com/zwy-yjy/p/17381946.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JVM面试和学习中需要注意的部分 - Python技术站

(0)
上一篇 2023年5月8日
下一篇 2023年5月8日

相关文章

  • Java实现的时间戳与date对象相互转换功能示例

    以下是“Java实现的时间戳与date对象相互转换功能示例”的攻略: 1. 使用Date对象实现时间戳与日期字符串的相互转换 1.1 时间戳转日期字符串 import java.text.SimpleDateFormat; import java.util.Date; public class TimestampToDateStr { public stat…

    Java 2023年5月20日
    00
  • IDEA创建MyBatis配置文件模板的方法步骤

    下面是创建MyBatis配置文件模板的方法步骤: 打开IntelliJ IDEA开发环境,选择File -> Settings -> Editor -> File and Code Templates; 在File and Code Templates窗口的右侧,选择Other -> MyBatis; 在代码模板中,输入MyBatis…

    Java 2023年5月20日
    00
  • Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)

    Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较) 在Java中,我们有多种方法可以动态执行代码,包括使用ScriptEngine引擎、使用Java Compiler API、使用字节码增强框架等。其中,使用ScriptEngine引擎是最常见的一种方法。 ScriptEngine引擎 ScriptEngine是Java SE…

    Java 2023年5月23日
    00
  • MyBatis带参查询的方法详解

    当我们使用MyBatis进行数据访问时,经常需要传入参数进行查询操作。在MyBatis中,带参查询的方法非常常见,本文将分为以下几个部分详细讲解带参查询的方法及其用法。 1. 概述 MyBatis支持多种传参方式,包括单个参数、Map、@Param注解、JavaBean等。但无论哪种方式,都遵循以下规则: 在SQL中通过#{}占位符来表示参数。 Java类型…

    Java 2023年5月20日
    00
  • Spring AOP实现原理解析

    下面我将为你讲解 Spring AOP 实现原理解析的完整攻略。 Spring AOP 实现原理解析 1. 动态代理 Spring AOP 的实现原理是基于 JDK 动态代理或者 CGLIB 动态代理两种技术实现的。本文主要讲解的是 JDK 动态代理的实现原理。 在 JDK 动态代理中,代理对象实现了被代理对象的所有接口,并将方法调用转发给被代理对象。实现的…

    Java 2023年5月19日
    00
  • Spring Boot详细打印启动时异常堆栈信息详析

    下面是关于Spring Boot详细打印启动时异常堆栈信息详析的完整攻略: 1. 为什么需要打印启动时异常堆栈信息 在应用程序启动的过程中,可能会出现诸如配置不正确、依赖缺失等问题,导致应用程序启动失败。此时,打印详细的异常堆栈信息能够帮助我们更快、更准确地确定问题所在,并进行相应的调整。因此,了解如何打印启动时异常堆栈信息是非常必要的。 2. 如何配置Sp…

    Java 2023年5月27日
    00
  • 初学者,Spring快速入门

    以下是“初学者,Spring快速入门”的完整攻略: 目录 简介 准备工作 Spring快速入门 示例说明 总结 简介 Spring是一款流行的Java开发框架,它可以帮助开发者更加轻松地构建传统的Java应用程序和企业级应用程序。本攻略将帮助初学者快速入门Spring框架。 准备工作 在开始学习Spring框架之前,有一些基本的前置条件需要准备: JDK(J…

    Java 2023年5月19日
    00
  • java多线程有序读取同一个文件

    要实现Java多线程有序读取同一个文件,可以使用以下步骤: 步骤一:打开文件流 首先,需要创建一个FileInputStream对象,该对象可以打开文件流并准备读取数据。代码示例如下: FileInputStream fis = new FileInputStream("file.txt"); 步骤二:创建 BufferedReader …

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部