前言
关于[JVM]系列面试知识点[总结]了一个思维导图,分享给大家
内存结构
[线程]共享区域
堆(用于存放对象[实例])
1、新生代
(1)Eden区
(2)Survivor(from)区(设置Survivor是为了减少送到老年代的对象 )
(3)Survivor(to)区 (设置两个Survivor区是为了解决碎片化的问题)
(4)eden:survivor:survivor = 8:1:1
2、老年代
老年代:新生代=2:1
方法区
1、运行时常量池
(1)Class 文件中的常量池([编译]器生成的各种字面量和符号引用)会在类加载后被放入这个区域。
(2)存储信息
符号引用
1)符号引用包含的常量
-
类符号引用
-
方法符号引用
-
字段符号引用
2)概念解释
一个[java]类(假设为People类)被编译成一个class文件时,如果People类引用了Tool类,但是在编译时People类并不知道引用类的实际内存地址,因此只能使用符号引用来代替。而在类装载器装载People类时,此时可以通过虚拟机获取Tool类的实际内存地址,因此便可以既将符号org.simple.Tool替换为Tool类的实际内存地址,及直接引用地址。 即在编译时用符号引用来代替引用类,在加载时再通过虚拟机获取该引用类的实际地址。以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可。符号引用与虚拟机实现的内存布局是无关的,引用的目标不一定已经加载到内存中。
字面量
-
文本字符串(String a = “abc”,这个abc就是字面量)
-
八种基本类型(int a = 1; 这个1就是字面量)
-
声明为[final]的常量
2、静态变量
3、final类型常量
4、类信息
-
类的完整有效名
-
[返回值类型]
-
修饰符(public,private…)
-
变量名
-
方法名
-
方法[代码]
-
这个类型直接父类的完整有效名(除非这个类型是interface或