2021-11-01

2021-10-31  本文已影响0人  ProgramBird1994

嗯...我司由于比较操蛋的原因,现在需要考虑面试的一些东西了...希望通过每天写点东西的形式来把自己的知识体系梳理一下,并为以后可能的面试做准备吧..

今天先复习一下JVM GC有关的东西吧。下午内部面试的时候问了个问题:如果现在的hardware的memory不能改,但是程序频繁的FULL GC,怎么破?

嗯。。没啥头绪,网上一般都是说先打开gc log.

我觉得有必要先复习一下JVM GC的一些基础吧。。

首先我们搞清楚JVM的运行时数据区分为以下几大块

堆是JVM的核心区域,用于存储对象实例。大多数的GC发生在这里。

方法区

方法区存储着class的信息。例如:类的名字,修饰符,静态变量,final修饰的变量,构造函数,字段,方法等。

运行时常量池也是方法区的一部分.String.intern()会在运行时常量池分配一个字符串在此区域。

虚拟机栈

生命周期和线程一样。每个方法调用都会产生一个栈帧(stack frame)放入栈中。

栈帧会存放临时变量表,动态链接,方法出口,操作数等信息。

本地方法栈

本地方法栈用于存储本地方法栈帧

程序计数器

用于存储当前线程执行虚拟机字节码指令地址。划分在CPU,线程私有。

如果调用的是本地方法,则是null。

唯一一个不会产生OOM的区域。

今天先复习到这里吧。。。

上一篇 下一篇

猜你喜欢

热点阅读