java面试题/认证答辩 ---java内存模型(JMM)和运行内存结构(JVM)

本文参考:

> https://blog.csdn.net/xy3233/article/details/108296943
> https://www.cnblogs.com/yichunguo/p/12007038.html

JAVA内存模型(Java Memory Model,JMM) 是一种虚拟机规范,用于屏蔽各种硬件和操作系统的内存访问差异。
JMM解决了CPU多级缓存、处理器优化、指令重排等导致的内存访问问题,保证了并发场景下的一致性、原子性和有序性。

jvm: java虚拟机
jvm内存结构:
栈: 线程私有, 用于存放局部变量, 方法出口等(jdk1.8将运行时常量池,静态变量也存储在堆中)
堆: 存放对象实例以及数组, 分为新生代和老年代,垃圾回收的主要区域
程序计数器: 保存程序当前执行地址(或者说下一条指令的地址)
方法区: 存储类加载信息. 编译后的代码等,JDK1.8之前方法区由"永久代"实现,使用的是JVM内存, JDK1.8之后使用的是系统内存,被叫做"元空间"

垃圾回收:
垃圾回收发生场所
(1) 堆: ①新生代 ②老年代
(2)元空间
垃圾回收触发条件:
Minor GC:对新生代进行回收,不影响老年代, minorGC非常频繁.
Full GC 也叫 Major GC: 老年代满了,永久代(元空间)满了,System.gc()被显示调用
垃圾回收算法:
①: 标积清除: 清除所有未被标积的对象,适用于存活对象较多的情况。(老年代)
② 标积整理: 将活着的对象移动到一端,然后清除边界一外的地方
③ 复制算法,将活着的对象复制到另一边空着的区域,然后清除本区域

性能调优:
对JVM调优主要目的是: 减少GC频率和FullGC的次数
查看是否需要调优:
① 可以使用JVM工具(Jmap+mat)监控当前日志,JVM参数,分析内存快照,GC日志等
② 导出dumo文件用于分析

你可能感兴趣的:(面试刷题,java,JVM)