JVM总结

JVM GC的说法,我也是网上看了很多的说法,总结的。


我们项目运行时,会启动JVM(JAVA虚拟机)


可以看到我们的正式服的都是class文件。


JVM会先一次性分配一块较大的空间。


JVM先运行Class Loader把类都装载到内存区域


内存区域会分为几种类型进行分配:


1:方法区:存放常量、静态变量、构造函数
2:java堆:存放被new出来的对象
3:java栈:存放每次调用方法时,方法内的变量、返回值等
4:程序计数器:存放运行时线程之间需要切换之前的内存地址。
5:本地方法栈:这个我看的不怎么懂,好像说是什么本地方法,你们可以查下,告诉大家是什么。




而GC(垃圾回收机制),回收时间是随机的,看JVM的心情。当然这种看心情的情况是在新生代与老年代存放空间未满的。


先说说对象的生命周期:
1、年轻代:分为(Enden区和两个Survivor区(FROM和TO区))新的对象产生时,存放在年轻代Enden区。
说明:当Enden区被对象填满时,会执行GC(就是会触发垃圾回收机制),把存活下来的对象放到Survivor区
然后看JVM的心情进行多次GC时,依然存活下来的对象会转到年老代
这就好像我springmvc框架里,项目一移动的时候,会产生很多新对象,这些对象先到了Enden区,然后运行了一段时间,发现这些对象还在,就会被移到年老代区

2、年老代:存放N次都没被GC掉的对象,生命周期比较长的。
说明:年老代空间满了之后也会执行GC,称为:Full GC

3、永久代:存放静态变量、类、方法啊这些数据,一般不会去清理永久代的数据。


一般来说,代码敲的不好,会产生很多的年老代。当GC去回收时,发现没有回收的可用的内存空间,会一直循环去回收,导致CPU 100%。


所以我们尽可能的配置好JAVA JVM的参数
1、Xms JVM的初始堆大小
2、Xmx JVM的最大堆大小
当最小堆被占满后,会进行GC,如果GC之后还不能得到足够的内存,就会扩展堆,最大扩展至Xmx设定值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫川琴秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值