jvm堆中的分区以及对应使用的GC算法

记录第一篇博客

jvm堆的解释

我们在jvm中的分类有许多,其中包括有两个子系统(类装载器,执行引擎)和两个组件(运行时数据区、本地方法接口)。
而堆属于运行时数据区中的其中一个组件。堆在jvm中的重要性不言而喻。它几乎存储了所有的引用对象的实际值,也就是引用对象的地址。
他也是java虚拟机中内存最大的一块,所有的对象的内存分配都在这里进行。而且堆是被所有的线程共享。这个特性直接和主内存挂钩。

堆中的分区

在虚拟机堆中的分区从大类上来说可以分为三类,分别为新生区、老年区、以及永久区,而新生代又可以分为伊甸园区、幸存者0区、以及幸存者1区。在jdk1.6之前,永久区叫做永久代,常量池在方法区中,在jdk1.7这个版本,逐渐实现去永久代。常量池在堆中。在jdk1.8之后,没有永久代的说法,更多的是叫做元空间。实质是一样的。

值得注意的是元空间属于逻辑上存在、但是物理上不存在的。我们可以在运行程序的时候给堆内存进行参数的调试。打印出对应的区的大小。可以看到新生区加老年区的大小正好是我们给堆定义的内存大小。在物理角度上元空间是不存在的。

在永久区中都是用来存放jdk自身携带的class对象。interface元数据,
存储java运行时的一些环境或者类信息。这个区域不存在垃圾回收。关闭虚拟机就会释放这个区域内存。

值得注意的是永久区不会出现OOM的错误。仅在以下几种情况可能出现
1、一个启动类加载了大量的第三方jar包,tomcat部署太多应用、大量动态生成的反射类。
2、不断的被加载。直到内存满就会出现OOM。(永久区中的内存满。)
所以jvm调优都是在新生区以及老年区中进行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值