Bootstrap

【每天8题】JVM高频面试题

1、对象在哪块内存分配?

        数组和对象在堆内存分配,某些对象没有逃逸出方法,可能被优化为在栈上分配

2、谈谈JVM中的常量池

a.字符串常量池:存放在堆中,包括String对象执行intern()方法后存的地方,双引号直接引用的字符串

b.运行时常量池:constant_pool,JVM定义的概念

3、谈动态年龄判断

a.这里涉及到-XX:TargetSurvivorRatio参数,Survivor区的目标使用率默认为50,即survivor区对象目标使用率为50%

b.survivor区相同年龄所有对象大小的总和(survivor区内存大小*这个目标使用率)时,大于或等于改年龄的对象直接进入老年代。

c.当然,这里还需要考虑参数-XX:MaxTenuringTheshold晋升年龄最大阈值

4、谈谈永久代

a.jdk1.8之前,Hostpot中方法区的实现是永久代(Perm)

b.jdk7开始把原本放在永久代的字符串常量池、静态变量等移出到堆,JDK1.8开始去除永久代,使用元空间(Metaspace),永久代剩余内容移至元空间,元空间直接在本地内存分配。

5、JVM 有哪些运行时内存区域

a. The pc Register ,程序计数器

b. java Virtual Machine Stacks, java 虚拟机栈

c. Heap 堆

d. Method Area ,方法区

e. Run-Time Constant Pool ,运行时常量池

f. Native Method Stacks ,本地方法栈

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;