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
JVM面试和学习中需要注意的部分的更多相关文章
- 2019年JVM面试都问了什么?快看看这22道面试题!(附答案解析)
一. Java 类加载过程? Java 类加载需要经历一下 7 个过程: 1. 加载 加载是类加载的第一个过程,在这个阶段,将完成一下三件事情: • 通过一个类的全限定名获取该类的二进制流. • 将该 ...
- JVM类加载过程学习总结
JVM类加载过程学习总结 先不说JVM类加载的原理,先看实例: NormalTest类,包含了一个静态代码块,执行的任务就是打印一句话. /** * 在正常类加载条件下,看静态代码块是否会执行 * @ ...
- jvm 类文件结构学习
本文以代码示例来学习 java 类文件的结构,其中对类文件结构的学习均来自周志明先生所著的 <深入理解 Java 虚拟机>一书,在此表示诚挚的感谢. 代码如下: package com.r ...
- 面试、笔试中常用的SQL语句(数据库知识必杀)一共50个!!!
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 ...
- JVM(七),JVM面试小知识
七.JVM面试小知识 1.JVM三大性能调优参数 -Xms -Xmx -Xss 的含义 2.java内存模型中堆和栈的区别 3.不同JDK版本中的intern()方法的区别
- 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...
- Java基础技术JVM面试【笔记】
Java基础技术JVM面试[笔记] JVM JVM 对 java 类的使用总体上可以分为两部分:一是把静态的 class 文件加载到 JVM 内存,二是在 JVM 内存中进行 Java 类的生命周期管 ...
- JVM面试点汇总
JVM面试点汇总 我们会在这里介绍我所涉及到的JVM相关的面试点内容,本篇内容持续更新 我们会介绍下述JVM的相关面试点: JVM内存结构 内存溢出问题 方法区与永久代和元空间 JVM内存参数 JVM ...
- 记录Python学习中的几个小问题
记录Python学习中的几个小问题,和C#\JAVA的习惯都不太一样. 1.Django模板中比较两个值是否相等 错误的做法 <option value="{{group.id}}&q ...
- 深度学习中的Data Augmentation方法(转)基于keras
在深度学习中,当数据量不够大时候,常常采用下面4中方法: 1. 人工增加训练集的大小. 通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augm ...
随机推荐
- AtCoder-abc230_g GCD Permutation 容斥
J - GCD Permutation 传送门: J - GCD Permutation 知识点:素数筛.容斥定理.gcd 题意:长度为n的一个排列a中,求满足\(gcd(i,j)!=1 且 gcd( ...
- win10修复系统
DISM.exe /Online /Cleanup-image /Restorehealth sfc /scannow
- Swust OJ977: 统计利用先序遍历创建的二叉树中的空链域个数
题目描述 利用先序递归遍历算法创建二叉树并计算该二叉树中的空链域个数. 输入 输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树). 输出 输出该 ...
- 【Linux 中断】红外接收器设备驱动
一.概述 现在很多家电都使用了红外,而智能家居的诞生,连音响都带了红外遥控功能.为了解决家里遥控器比较多的情况,多数手机都支持了红外功能,这和以前的万能遥控器一样.这里主要记录红外接收的驱动,当然明白 ...
- StyleGAN 调整面部表情,让虚拟人脸更生动
目录 人脸表情 调整步骤 调整结果 人脸表情 通过上一篇文章 StyleGAN 生成的人脸:https://www.cnblogs.com/tinygeeker/p/17236264.html 人脸图 ...
- springboot实现验证码功能
实现验证码功能 先在utils包下创建一个ValidateImageCodeUtils.class package com.wfszmg.demo.utils; import javax.imagei ...
- SpringBoot——自定义start
更多内容,前往 IT-BLOG 一.Mybatis 实现 start 的原理 首先在写一个自定义的 start 之前,我们先参考下 Mybatis 是如何整合 SpringBoot:mybatis-s ...
- 温故知新----线程之Runnable与Callable接口的本质区别
温故知新----线程之Runnable与Callable接口的本质区别 预备知识:Java中的线程对象是Thread,新建线程也只有通过创建Thread对象的实例来创建. 先说结论 1 Runnabl ...
- 《3D编程模式》写书-第1天记录
大家好,我现在开始写书了,书名为:<3D编程模式> 我会在本系列博文中记录写书的整个过程,感谢大家支持! 这里是所有的的写书记录: <3D编程模式>写书记录 为什么写书 去年我 ...
- 关于Java基础中的异常处理知识点
Java中的异常(Exception),史上最全的教程来啦~_smilehappiness的博客-CSDN博客 以及Java:详解Java中的异常(Error与Exception)_王小二(海阔天空) ...