方法区的演进细节

方法区的演进细节,第1张

方法区的演进细节
  1. 首先明确:只有HotSpot虚拟机才有永久代。其他虚拟机是不存在永久代的概念 。
  2. HotSpot中 方法区的变化:
版本变化jdk1.6及以前有永久代(占用JVM内存),静态变量存放在永久代里,字符串常量池在运行时常量池中jdk1.7有永久代,但已经逐步“去永久代”,字符串常量池、静态变量移出,保存在堆中jdk1.8及以后无永久代,类型信息、字段、方法、运行时常量池保存在本地内存的元空间,但字符串常量池、静态变量仍在堆中

注意:静态变量是指“static Object obj=new Object()”中的obj变量,而不是new的对象。

永久代为什么被元空间替换 ?
(1)为永久代设置空间大小是很难确定的。在某些场景下,如果动态加载类过多,容易产生OOM。而元空间和永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此 ,默认情况下,元空间的大小仅受本地内存限制。
(2)对永久代进行调优是很困难的。
(3)替换成元空间也能够避免频繁的进行Full GC。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5610399.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存