前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jvisualvm&内存模型剖析-JVM(五)

Jvisualvm&内存模型剖析-JVM(五)

作者头像
用户9919783
发布2023-09-05 14:31:27
1800
发布2023-09-05 14:31:27
举报
文章被收录于专栏:后端从入门到精通

上篇文章代码讲解了tomcat加载以及gc回收流程。

Jvm内存模型剖析优化-JVM(四)

一、Jvisualvm

我们可以编写如上代码,之后打开jvm自带的工具jvisualvm。

如果我们看visual不会明显变化,则可以修改睡眠参数,时间改小。

当我们运行程序,通过visual工具可以看到visual GC的运行情况,如我们上篇文章所说,他会从Eden到s0到s1,s0和s1反复拷贝,直到代龄达到15次,则会到old,最后导致OOM。

(如果有的同学没有visual GC则需要去工具->插件自行安装)

当我们老年代里越来越多,放满会怎么办呢,会触发full gc,他回收的整个堆和方法区。

但因为我们代码里对象还在一直引用回收不了,于是发生了OOM。

整个gc的过程中,有STW(stop the world)机制,会暂停用户线程,当用户下单的时候,gc过程可能会触发STW机制,这时候用户体验会受影响,会感受到网络卡顿。

每个年代垃圾收集器是不一样的,后面会一一详解。

元空间是什么,jdk1.8之前叫永久代,之后叫元空间,直接在物理内存。所以方法区是在物理内存里。初始值是21m,最大的会把物理内存全部用完。

二、设置参数大小

堆:-Xms2048M -Xmx2048M 新生代:-Xmn1024M

方法区:-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M

设置元空间最大值(默认-1)和初始空间大小(默认21,字节为单位)

建议最大值和初始值元空间设置一样大。

栈:-Xss512k

栈里是给一个线程用的,所以设置小点

可以执行命令

Java -Xms2048M -Xmx2048M -Xmn1024M

-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M

-Xss512k -jar mic-eureka-server.jar

我们写代码实例-Xss设置的小点,则count打印的更小,因为栈内存变小了,这也意味着可以有更多的线程。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端从入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档