东莞网站建设aj博客,赣州网络,新发布的新闻,app界面设计论文1#xff0c;背景
class文件、类的加载过程。我们的class文件就要进入到JVM内存里#xff0c;我们沿着经典的JDK1.6#xff0c;JDK1.7#xff0c;JDK1.8看看在其中都经历了哪些改变
概念的统一#xff1a;
方法区#xff1a; 方法区可以看作是JVM逻辑上管理一片区域的…1背景
class文件、类的加载过程。我们的class文件就要进入到JVM内存里我们沿着经典的JDK1.6JDK1.7JDK1.8看看在其中都经历了哪些改变
概念的统一
方法区 方法区可以看作是JVM逻辑上管理一片区域的名字的概念永久代 永久代和元空间都是对方法区的实现只不过是1.7以前是永久代1.8开始永久代被替代成元空间了。元空间
2内存模型的演变
1.6及以前JVM运行时数据区方法区叫永久代 JVM1.7
1.7永久代还存在但是已经逐步去永久代字符串常量和静态变量移到堆中
JVM1.8 及以后
1.8以后无永久代类型信息、字段、方法、常量直接保存在元空间元空间用的是直接内存字符串常量池和静态常量还是保持在堆中。
思考
永久代为什么要被元空间替换 永久代设置空间大小是很难确定的。在某些场景下如果动态加载的类过多容易产生OOM。或者是朝生夕死的类比较多。 对永久代的调优比较困难
字符串常量池为什么调整 永久代的回收效率比较低在full gc的时候才会触发。发生full gc是老年代的空间不足、永久代空间不足才会促发。这就导致stringTable回收效率不高。而我们开发中会有大量的字符串被创建回收效率低导致永久代内存不足。放到堆中能及时回收。