JVM系统优化实践(3):分代模型
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~
大部分在代码里创建的对象,存活周期都是极短的,只有少数对象是长期存活的,如静态类和静态变量。采用不同方式创建和使用对象,其生存周期也不同。因此,JVM将堆内存划分为年轻代、老年代两个区域。
1、年轻代:将创建和使用完之后马上就要回收的对象放在里面;
2、老年代:将创建之后需要长期存在的对象放在里面。
方法区即永久代(也叫持久代,JDK1.8之后没有永久代了,只有metaspace)。元空间中存放类信息与各类常量数据。
大部分正常对象都优先在年轻代分配内存:
就算是垃圾回收也得有触发条件,那就是:当新生代空间不足时,就会触发一次Minor GC/Young GC:
另外,年轻代也不是岁月无限——如果一个年轻代对象,成功地“躲过”了15次垃圾回收,那么它的“年龄”就是15岁了——每“躲过”一次回收,就增加一岁。当“年龄”足够大时,就会被JVM转移到老年代。老年代也一定会进行垃圾回收,只是回收算法和年轻代不同而已:
与JVM相关的一些核心参数:
1、-Xms和-Xmx:Java堆内存大小和其最大值,这对参数通常设置成一样的值;
2、-Xmn:Java堆内存中年轻代大小(老年代的大小就是扣除年轻代后的值);
3、-XX:PermSize和-XX:MaxPermSize :永久代大小和其最大值,一般也设置成一样的值;
4、-XX:MetaspaceSize和-XX:MaxMetaspaceSize(JDK1.8之后取代-XX:PermSize和-XX:MaxPermSize);
5、-Xss:每个线程的栈内存大小。
启动应用时可以设置JVM参数:
本地运行:Debug Configuration -> Arguments -> VM arguments
-Xms512M -Xmx512M -Xmn256M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M
线上部署参考示例:
java -jar -Xms512M -Xmx512M -Xmn256M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M app.jar
请问贵公司的Tomcat、Spring Boot启动系统时,JVM参数是如何设置的?
感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!