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 ...
随机推荐
- git merge的原理
当我我们拉去代码合并到master的另一个分支上面去的时候 只是对比当前分支commit的修改与增加的代码,其他代码以master为主.
- LeetCode224 基本计算器
idea:刚开始是打算分类讨论,建立了数字栈和字符栈,按照传入字符当时两个栈的基本情况分类,结果讨论完之后分类太麻烦,导致分析完了之后漏洞不少.我觉得这道题难点在于括号和负号的处理,一开始将导致计算机 ...
- 发布订阅者模式 -- 简单的PubSub
/** * 发布订阅者模式 * **/interface handle { [propName: string]: Function[]}class PubSub { private handles: ...
- 如何确定有价值的RPA场景
什么是RPA? RPA(Robotic Process Automation,机器人流程自动化)是通过特定的.可模拟人类在计算机界面上进行操作的技术,按规则自动执行相应的流程任务,代替或辅助人类完成相 ...
- 音频的价值、AI Codec 的意义与算法能力的边界丨一期一会 • 音频工程师专场
前言 音频技术发展到今天,经历了从模拟音频到数字音频到历程.国际音频工程师协会创建于 1948 年,中国数字音频技术起步相对较晚,长期被国外组织和公司垄断.随着中国的不断发展.科技日益进步,经过近三十 ...
- java 企业级开发中常见的注入方式
1.Spring 注入有四种方式: ・set 注入 这是最简单的注入方式,假设有一个 SpringAction,类中需要实例化一个 SpringDao 对象,那么就可以定义一个 private 的 S ...
- 表现标准语言CSS3学习 入门+导入方式
表现标准语言CSS3学习 入门+导入方式 如何学习: css是什么 css怎么用(快速入门) css选择器(重点+难点) 美化网页(文字.阴影.超链接.列表.渐变...) 盒子模型 浮动 定位 网页动 ...
- 明解STM32—GPIO理论基础知识篇之寄存器原理
一.前言 在之前的STM32的GPIO理论基础知识中,分别对基本结构和工作模式进行了详细的介绍.GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析:GPIO工作模式中主要介绍GPI ...
- 关于关键字extends与implements的不同以及关于接口的详细介绍的文章
extends与implements的不同 1.在类的声明中,通过关键字extends来创建一个类的子类. 一个类通过关键字implements声明自己使用一个或者多个接口. extends 是继承某 ...
- 使用Kubernetes快速启用一个静态页面
使用Kubernetes快速启用一个静态页面 将html静态页面放置在nfs目录下,通过Deployment启动时挂在到nginx页面目录即可 查看yaml内容 root@hello:~# cat c ...