JVM内存区域与常见问题

内存结构

这里先以JDK1.8 hotspot垃圾收集器为例,讲讲每块区域存储的数据以及可能会抛的异常。

存放对象实例,会出现内存溢出或内存泄露等情况。

一次方法调用会产生一个栈帧,如果出现递归死循环调用栈空间满了,会出现StackOutOfErrorException。

本地方法栈

调用native修饰的C/C++语言实现的方法

元空间

存放类class对象,会自己动态调整大小,满了会引发Full GC。

程序计数器

记录线程代码执行的位置,cpu时间片轮转后在原来的位置继续执行。

堆外内存

堆外内存操作的是哪块内存区域?
堆外内存满了会怎么样?
Java提供的操作堆外内存的方法?
NIO Buffer

垃圾回收算法

计数法

不能解决对象实例循环引用

可达性分析

判断对象是否可回收,多标漏标问题

三色标记法

白色,没有引用或还没被扫描标记。
灰色,有指向黑色标记节点的引用,不是GC ROOT节点。
黑色,确定有被引用,将不被回收。

垃圾回收器

CMS
相比默认的垃圾回收器,在STW停顿时间做了优化。
G1
各内存区域划分为大小相等的Region,可预测的停顿时间。

年轻代、老年代多久GC一次算正常?
JVM参数优化?

工具

查看GC回收频率

jstat

查看堆内存,排查OOM

jmap

待续

你可能感兴趣的:(Java,jvm,java,开发语言)