当前位置:网站首页>Summary of JVM interview questions (continuously updated)
Summary of JVM interview questions (continuously updated)
2022-08-01 01:11:00 【March is immortal】
JVM内存划分
Java堆: 存储对象实例. 分为新生代(伊甸园区,幸存者1区,幸存者2区)老年代
方法区: Its implementation is yuan space,存储运行时常量池,被虚拟机加载的类信息,常量等.
虚拟机栈:执行JavaMethods provide service,Storage methods runtime data needed,字符串常量池,静态变量
本地方法栈: Provide service for perform local method
程序计数器: 存储下一条指令的地址,由执行引擎读取下一条指令
类加载过程
1)加载 :The class after the corresponding binary file is loaded into the memory,类的元信息,Runtime data stored in area,And generate the class in the heapClass对象作为方法区这个类的各种数据的访问入口
2)链接:先验证class文件的正确性,Then the allocated memory to class variables and set the default initial value,Then the symbols referenced within the constant pool into direct reference
3)初始化 :javacThe compiler automatically collect all class variable assignment in class action and static block of statements merged intoclinit()方法,Then go to class variables to do display initialization.
若该类具有父类,JVM会保证子类的clinit()执行前,父类的clinit()已经执行完毕. 虚拟机必须保证一个类的clinit()方法在多线程下被同步加锁.
类加载器有哪些?
- 虚拟机自带的加载器
- 启动类加载器:C/C++实现,加载java核心类库(eg:String),不继承ClassLoader类,无父加载器,Load it extend classes and application class loader(Loader is also a class,Need to use the parent loader loading child loader)
- 扩展类加载器:java编写,派生于ClassLoader类,父类加载器–>引导类加载器,加载jre/lib/ext子目录(若用户创建的jar也在此目录下,By the extension class loader to load)
- 系统类加载器:java编写,派生于ClassLoader类,父类加载器–>引导类加载器,User-defined class by default with the system class loader to load
- 自定义加载器
双亲委派机制
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,If the parent class loader and the parent class loader,则继续向上委派,最终到达顶层启动类加载器,And then to search,When the corresponding loader can complete loading request will go to load
优势:
避免类的重复加载:The parent class loader to load,A subclass need not load
保护程序安全,防止核心API被随意篡改(如自定义类:Java.lang.StringLoading is still the core ofapi下的String)
如何判断某个对象是垃圾
可达性分析算法:
- JVM 中的垃圾回收器通过可达性分析来探索所有存活的对象
- 扫描堆中的对象,会从GC RootThe root node of start scanning,Check whether there is a reference point to the object,如果找不到,则表示可以回收
可以作为GC Root 的对象
- 虚拟机栈(栈帧中的本地变量表)中引用的对象(局部变量).
- The heap object class static attribute references
- 方法区中常量引用的对象
- 本地方法栈中 JNI(即一般说的Native方法)引用的对象
垃圾收集算法有哪些?
1)标记清除算法:通过GC可达性分析算法,Starting from the root node tag all can reach the object,Not marked as the garbage objects,Complete removal has not all been marking object.可能会产生大量碎片
2)复制算法:将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,然后清除正在使用的内存块中的所有对象.
3)标记-整理:通过GC可达性分析算法,Starting from the root node tag all can reach the object.将所有的存活对象压缩到内存的一段,之后清理边界所有的空间
垃圾回收器
垃圾回收器主要分为以下几种:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1;
Serial: 单线程的收集器,使用复制算法.在进行垃圾回收时,Need to suspend all the executing thread(stop the world)
ParNew: Serial收集器的多线程版本,也需要stop the world,复制算法
Parallel Scavenge: 并发的多线程收集器,采用复制算法,目标是达到一个可控的吞吐量,虚拟机会根据系统的运行状态收集性能监控信息,动态设置这些参数,以提供最优停顿时间和最高的吞吐量;
Serial Old: Serial收集器的老年代版本,单线程收集器,使用标记整理算法.
Parallel Old: 是Parallel Scavenge收集器的老年代版本,使用多线程,标记-整理算法.
CMS: 是一种以获得最短回收停顿时间为目标的收集器,标记清除算法,运作过程:初始标记,并发标记,重新标记,并发清除,收集结束会产生大量空间碎片;
G1: 标记整理算法实现,运作流程主要包括以下:初始标记,并发标记,最终标记,筛选回收.不会产生空间碎片,可以精确地控制停顿;G1将整个堆分为大小相等的多个Region(区域),G1跟踪每个区域的垃圾大小,在后台维护一个优先级列表,每次根据允许的收集时间,优先回收价值最大的区域,已达到在有限时间内获取尽可能高的回收效率;

分代垃圾回收过程
Because most of the objects are facing life evening death,A few surviving object is longer,So the object's recovery is a generational
新创建的对象首先分配在 Eeden 区
新生代空间不足时,触发Minor GC ,eden 区 和 from 区存活的对象使用 - copy 复制算法到 to 中,存活的对象年龄加1,然后交换 from to 的位置,空出大量连续内存区,放对象,The space is insufficient and performMinor GC,如此反复.
minor gc 会引发 stop the world(SWT),暂停其他线程(垃圾回收时会涉及大量关于对象的复制,其他线程会产生不必要的麻烦,如线程不到对象了,因为地址变化了),等垃圾回收结束后,恢复用户线程运行 当幸存区对象的寿命超过阈值时,The life of the biggest default is 15(4bit)----多次回收还存在,说明价值较高,放入老年代,不用频繁回收.会晋升到老年代.Or survivors area half the size of objects of the same age group of survivors in,Or there is a large object,New generation can't fit,Will be promoted to old s.
当老年代空间不足时,会先触发 minor gc,如果空间仍然不足,那么就触发 full fc ,STW停止的时间更长!
Student student = new Student();在内存中做了哪些事情?【创建对象的步骤】
加载Student.class文件进内存(加载、链接、初始化)
In the stack memory for the variables开辟空间
在堆内存为Student对象开辟空间
对学生对象的成员变量进行默认初始化
设置对象的对象头
对学生对象的成员变量进行显示初始化
通过构造方法对学生对象的成员变量赋值
Student对象初始化完毕,把对象地址赋值给s变量
对象的内存布局
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ij2JENIm-1659020190340)(network-img/image-20211228191157179.png)]](/img/be/89c1e568052963875c68aa2b01b54d.png)
边栏推荐
- RTL8762DK UART (two)
- 【元胞自动机】基于matlab界面聚合元胞自动机模拟【含Matlab源码 2004期】
- Compose principle - the view and the principle of two-way data binding
- qlib量化源码分析:qlib/qlib/contrib/model/gbdt.py
- WebApi 打个Attribute 统一处理异常
- Introduction to the decision logic of WAASAP WebClient UI page labels
- OSF understands the agile development model in one minute
- RTL8762DK 点灯/LED(三)
- gateway gateway cross domain
- WindowInsetsControllerCompat简单使用
猜你喜欢

Automated machine learning pycaret: PyCaret Basic Auto Classification LightGBM

谷歌『云开发者速查表』;清华3D人体数据集;商汤『通用视觉框架』公开课;Web3极简入门指南;高效深度学习免费书;前沿论文 | ShowMeAI资讯日报

【元胞自动机】基于matlab界面聚合元胞自动机模拟【含Matlab源码 2004期】
![leetcode: 1648. Color ball with decreasing sales value [Boundary find by two points]](/img/b9/7bd33bd981ace25e3bbfc7be9117ff.png)
leetcode: 1648. Color ball with decreasing sales value [Boundary find by two points]

Matlab / ArcGIS 处理GPM全球月均降水数据

Introduction to machine learning how to?

LeetCode每日一练 —— 环形链表问题(面试四连问)

RTL8762DK PWM(七)

SC7A20 (Silan Micro-Accelerometer) Example

自动化机器学习pycaret: PyCaret Basic Auto Classification LightGBM
随机推荐
RTL8762DK 点灯/LED(三)
蓝图:杨辉三角排列
现代企业架构框架1
【元胞自动机】基于matlab界面聚合元胞自动机模拟【含Matlab源码 2004期】
Js replication
Rasa 3.x 学习系列- Rasa - Issues 4918 学习笔记
How to get started with YOLO?How to implement your own training set?
OSD读取SAP CRM One Order应用日志的优化方式
Team of Professor Chen Jianyu of Tsinghua University | Contact Safety Reinforcement Learning Framework Based on Contact-rich Robot Operation
【 】 today in history: on July 31, "brains in vats" the birth of the participant;The father of wi-fi was born;USB 3.1 standard
Kyoto University:Masaki Waga | 黑箱环境中强化学习的动态屏蔽
MYSQL经典面试题
北京突然宣布,元宇宙重大消息
Rasa 3.x Study Series - Rasa - Issues 4918 Study Notes
Nmap 操作手册 - 完整版
Data Middle Office Construction (VII): Data Asset Management
leetcode:1648. 销售价值减少的颜色球【二分找边界】
Application of integrated stepper motor in UAV automatic airport
Super like the keyboard made from zero, IT people love it
【历史上的今天】7 月 31 日:“缸中之脑”的提出者诞生;Wi-Fi 之父出生;USB 3.1 标准发布