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 ...
随机推荐
- pip安装报错 cannot uninstall a distutils installed project
sudo pip install --ignore-installed xxx 在安装jupyter notebook的时候,遇到了这个问题,于是上网搜索,搜到了靠谱答案github解决方案 sudo ...
- Windhill获取团队角色、用户
//获取容器团队里的用户和角色,也可以获取容器团队里某一角色的用户 WTContainer pContainer = project.getContainer(); if (pContainer in ...
- SQL 抽象语法树及改写场景应用
SQL 抽象语法树及改写场景应用 1 背景 我们平时会写各种各样或简单或复杂的 sql 语句,提交后就会得到我们想要的结果集.比如 sql 语句,"select * from t_user ...
- nios verify failed 问题解决。
nios 调试时碰到上图所示问题.根据下载地址可以判断下载flash.sdram都成功,这里说明电路设计和焊接都没有问题. 但是在flash地址verify failed between adress ...
- Apache与tomcat区别--转水漫金山
Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行.Apache是Web服务器而Tomcat是Java应用服务器 Ap ...
- SAP transformation特殊字符
unicode 0000 在transformation中总被翻译成,这个转义在其他语法中不存在,所以总是报错.
- laravel whereHas sum & addSelect sum
$users = User::select('id', 'username', 'coins', 'cut') ->when(request()->has('agent_tip_sum') ...
- mxnet的broadcast_power() 注释错误
用relationnet时,发现broadcast_power()的源码中的注释如下: 官方文档中的注释如下: 怎么算都算不出它这个结果... 自己用mxnet实验了一把,发现是注释错了,代码如下:
- 深入理解 Python 虚拟机:浮点数(float)的实现原理及源码剖析
深入理解 Python 虚拟机:浮点数(float)的实现原理及源码剖析 在本篇文章当中主要分析在 cpython 虚拟机当中 float 类型的实现原理以及与他相关的一些源代码. Float 数据结 ...
- Oracle 服务器概念梳理
Oracle 公司是世界上最大的信息管理软件及服务提供商,因其复杂的关系数据库产品而闻名.Oracle 的关系数据库是世界上第一个支持 SQL 语言的数据库.支持服务器/客户机等部署.Oracle 数 ...