/**
* 测试使用jdk8中是否仍然可以使用永久代
* jvm options 
* -Xms20m -Xmx20m -Xmn10m -XX:PermSize=10m -XX:MaxPermSize=10m -XX:+PrintGCDetails

* 结果运行提示:
* Java HotSpot(TM) Client VM warning: ignoring option PermSize=10m; support was removed in 8.0
* Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=10m; support was removed in 8.0
* 结论: jdk8 hotspot已经不再使用方法区作为永久代

* 通过jvm参数增加选项:-XX:SurvivorRatio=65535 再进行测试

* @author zhuotao
*
*/
public class PermGenTest {

private static final int _1M = 1024 * 1024;
public static void main(String[] args) throws InterruptedException {

byte[] s0 = new byte[2 * _1M];
byte[] s1 = new byte[2 * _1M];
byte[] s2 = new byte[2 * _1M];
byte[] s3 = new byte[2 * _1M];
byte[] s4 = new byte[2 * _1M];
// 以上总共增加10M,触发minor GC, 通过GC不难发现,这10M的内存有eden和tenured分摊
// 此时,新增一个1M的内存 , 再次触发minor GC
byte[] s5 = new byte[1 * _1M];
// 新增一个1M的内存,由eden去进行担保
// 此时再新增一个7M的对象,将导致OOM的发生,Eden区无法存储。eden仍然分担3M的内容,而剩下的15M老年代担保失败,触发Full GC,GC后仍然无法存储,发生OOM
byte[] s6 = new byte[7 * _1M];
}

}

转载于:https://www.cnblogs.com/aking1988/p/4544364.html

jdk8永久代从方法区移除的验证相关推荐

  1. 持久代是方法区还是堆中的?

    2019独角兽企业重金招聘Python工程师标准>>> 昨天跟一哥们讨论,持久代在方法区,属不属于堆中的? 它的意思是持久代不属于堆,属于方法区,而我则认为持久代属于方法区也属于堆. ...

  2. 常量池、perm(持久代)、方法区、栈

    常量池.perm(持久代).方法区.栈 常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据. 除了包含代码中所定义的各种基本类型(如:int.long等等)和对象型(如Stri ...

  3. java虚拟机-JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)

    一.背景 1.1 永久代(PermGen)在哪里? 根据,hotspot jvm结构如下(虚拟机栈和本地方法栈合一起了): 上图引自网络,但有个问题:方法区和heap堆都是线程共享的内存区域. 关于方 ...

  4. JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)

    目录 1.背景 2.为什么废弃永久代(PermGen) 3.深入理解元空间(Metaspace) 4.总结 ========正文分割线===== 一.背景 1.1 永久代(PermGen)在哪里? 根 ...

  5. JVM 1.8 永久代---元空间 的变动

    介绍JVM的内存模型的博客:https://blog.csdn.net/q5706503/article/details/84614158 JDK8 HotSpot JVM 将移除永久区,使用本地内存 ...

  6. JVM-废弃永久代(PermGen)迎来元空间(Metaspace)

    一.背景 1.1 永久代(PermGen)在哪里? 根据,hotspot jvm结构如下(虚拟机栈和本地方法栈合一起了): 上图引自网络,但有个问题:方法区和heap堆都是线程共享的内存区域. 关于方 ...

  7. 运行时常量区-方法区

    文章目录 1.栈.堆.方法区的交互关系 2.方法区的理解 3.方法区在HotSpot VM中的演变 4.设置方法区大小 5.OOM的排查 6.方法区的内部结构 6.1 类型信息 6.2 类变量 (no ...

  8. JVM堆 栈 方法区详解

    一.栈 每当启用一个线程时,JVM就为他分配一个JAVA栈,栈是以帧为单位保存当前线程的运行状态 栈是由栈帧组成,每当线程调用一个java方法时,JVM就会在该线程对应的栈中压入一个帧 只有在调用一个 ...

  9. 1、虚拟机内存管理、运行时数据区、线程共享区、Java堆、新生代、老年代、Eden区域分配、方法区、线程独占区、虚拟机栈

    1.Java虚拟机内存管理 1.1.运行时数据区[Runtime Data Area] 1.1.1.线程共享区 1.1.1.1.Java堆[heap] 1.1.1.1.1.新生代.老年代.Eden区域 ...

最新文章

  1. ABB (2020牛客国庆集训派对day1)
  2. 因为一个循环,CPU搞了个新技术
  3. c++ stl stack_C ++ STL中的stack :: push()函数
  4. 软件oem要注意什么_英语配音学习要注意什么?配音的注意事项有什么?
  5. Python之路第二天
  6. 【优化算法】混合蛙跳优化算法(SFLA)【含Matlab源码 1472期】
  7. 1型错误和2型错误_沈阳地铁1号线太原街站导向牌出现错误!
  8. LeetCode剑指offer题目分类汇总及题解
  9. xx省联通SUN M5000清除故障灯MBU_B Degraded
  10. 【gdgzezoi】Problem A: Fairy
  11. 小米路由pro php,家庭实测 | 荣耀路由Pro2 可以吊打小米路由器吗?
  12. 谈个人网站发展及赚钱
  13. 和量子计算有什么区别 并发_超级计算机和量子计算机有什么区别?
  14. 豆瓣8.9,《数学之美》第三版,让你10分钟爱上数学
  15. 2017.3.15 贾老分享有感
  16. 读计算机专业买什么电脑比较好?
  17. 抖音自媒体运营工具合集
  18. WebJars和wro4j集成
  19. (1)esp32的micropython开发
  20. Java程序员已经饱和了?这是个老话题了

热门文章

  1. 外联接、自联接与联合
  2. 中国少数民族文学馆在内蒙古呼和浩特揭幕
  3. 51单片机程序下载、ISP及串口基础知识
  4. onclick 获取img 里面的id_红魔5S游戏手机如何解锁bl获取第三方面具root权限
  5. 文件重命名批量处理(Matlab)
  6. TypeScript模块系统、命名空间、声明合并
  7. VS中每次改代码后运行程序不更新,只有重新编译才生效。
  8. 团队编程项目代码设计规范(爬取豆瓣电影top250)
  9. Linq查询datatable的记录集合
  10. 读《构建之法》的心得体会