聊聊jvm的StringTable及SymbolTable
序 本文主要研究一下jvm的StringTable及SymbolTable StringTable及SymbolTable JDK的变动 在java7的时候将字符串常量池移到java heap,字符串常量池被限制在整个应用的堆内存中,在运行时调用String.intern()增加字符串常量不会使永久代OOM了。使用-XX:StringTableSize可以设置StringTableSize,默认是65536 java8的时候去除PermGen,将其中的方法区移到non-heap中的Metaspace,因而SymbolTable也跟随Metaspace移到了non-heap中 SymbolTable symbolic references in Runtime Constant Pool 一个完整的类加载过程必须经历加载( Loading )、连接( Linking )、初始化( Initialization )这三个步骤 其中类加载阶段就是由类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JVM内部,然后将其转换为一个与目标类型对应的java.lang.Class对象实例;连接阶段要做的是将加载到JVM中的二进制字节流的类数据信息合并到JVM的运行时状态中,经由验证( Verification )、准备( Preparation )、解析( Resolution