JVM面试知识点梳理

栏目: Java · 发布时间: 5年前

内容简介:程序计数器:每个线程执行程序指令的行号虚拟机栈:存放每个方法的栈帧,帧的入栈跟出栈就是方法执行的过程本地方法栈:Native方法的栈

程序计数器:每个线程执行程序指令的行号

虚拟机栈:存放每个方法的栈帧,帧的入栈跟出栈就是方法执行的过程

本地方法栈:Native方法的栈

Java堆:保存 Java 对象的地方,细分为 Eden区, From Survivor空间, To Survivor空间(线程共享)

方法区:线程共享,存放已经被虚拟机加载进来的类信息,常量、静态变量,JIT编译后的数据代码。java的class文件首先进入的到方法区里面去。

运行时常量池

方法区的一部分。

四大引用

强引用:只要强引用还在,引用的对象永远不会被回收

软引用: 发生内存溢出之前会清除

弱引用:垃圾回收的时候会收走

虚引用:对象生命周期不会受到它影响,只是在被回收掉的时候,收到通知。

对象的存活

  • 引用计数器
  • 可达性算法(堆外的引用, GC Roots)

垃圾回收算法

  • 标记清除法
  • 复制算法
  • 标记整理法
  • 分代收集

安全点、Minor GC、Full GC、 STW、TLAB

safePoint、安全区域 。(不操作内存的写,不跟主存打交道) STW(stop the world)

eden, survior中调用 Minor GC,之所以没有用STW,添加了统计老生代到 新生代数据引用的卡表(脏位)

新生代(eden + from + to)TLAB(Thread Local Allocation Buffers)由于to Survior的空间不够,找老年代做 内存担保

当经历过几次 从from 到 to过程后依旧活着的对象就可以进入到 老生代中去了。

垃圾收集器

  • Serial (单线程,新生代,copy算法)

  • Parallel New(多线程,新生代,copy算法,时间优先)

  • Parallel Scavenge(多线程,新生代,copy算法,吞吐量优先)

  • Serial Old(单线程,老生代, 标记清除)

  • Parallel Old(多线程,老生代, 标记清除)

  • CMS:垃圾收集器跟应用并行(多线程,老生代, 标记清除)分两次清理,第一次清理的时候,工作线程跟垃圾线程并行,第二次STW。(Java 9 被废除)

  • G1 (新生代 + 老生代)

类加载过程

  • 加载:验证Class文件是否按Class的结构走的,然后加载完成之后变成内存的结构
  • 验证:不会等加载结束,其实交替进行的(文件格式验证、元数据验证、字节码验证、符号引用验证)
  • 准备:分配内存,虚方法动态分配的方便发表。创建符号引用(所以跟验证是交叉的)
  • 解析:(符号引用到直接引用:字段解析、类方法解析、接口方法解析)
  • 初始化 (cinit<>)

即时编译(JIT优化)

热点方法,循环热点

C、C++属于静态编译,运行时候不会。java属于动态编译,虚方法动态分配,激进优化等使之更彻底,但是占用CPU。

优化方式:

  • 内联优化(省去了方法的加载,压栈等。诡异的TR1图)

  • 逃逸分析(对象没有被方法外引用的时候,直接到接近CPU的栈上分配存储空间。方法仅被一个线程调用到的时候,去掉同步锁。)

  • 指令集(Compare And Sweep, Compare and Set),???

  • 循环优化、向量优化


以上所述就是小编给大家介绍的《JVM面试知识点梳理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

必然

必然

[美] 凯文·凯利 / 周峰、董理、金阳 / 译言·东西文库/电子工业出版社 / 2016-1 / 58.00元

凯文·凯利对于经济和社会发展的趋势有着深刻的见解。20年前,他的《失控》一书,便已预见了当下几乎所有的互联网经济热点概念,如:物联网、云计算、虚拟现实、网络社区、大众智慧、迭代等。此次,凯文·凯利在新书《必然》中,提到了未来20年的12种必然趋势。一起来看看 《必然》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具