9
回答
懂jvm调优的进,内存溢出对于web项目有何影响?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

面试经常被问到jvm调优经验方面的问题我想知道,通过jvm调优后,我们的web应用程序会变的怎样?或者是什么情况下会去jvm调优?

本人只在开发web项目的时候报java.lang.OutOfMemoryError: Java heapspace错误的时候

举报
帅狗
发帖于1年前 9回/687阅
共有9个答案 最后回答: 1年前

堆内存溢出,导致你发生full gc,一旦发生full gc,是stop the world的概念,就是你的应用不可用。你可以想想后果

所谓调优一般都是根据实际项目特点、采用jdk版本、中间件版本等因素不同而有针对性的调整。一般来讲通过对堆内存的大小配置、持久代大小以及持久代和年轻代的比例分配,如果是显著多线程项目还应考虑单线程大小配置等等,其他等参数也要根据不同的项目属性特性而调整。一般调优都不是一蹴而就的也不是千篇一律的调整。通过前期判断、不断调整参数使被调项目达到最优状态。当然,调整后也不是说万事大吉了的。因为项目在不同时期对优化结果有不同的诉求,例如什么时候需要大吞吐量,什么时候需要支持高并发等不同场景来进行再次调整。

PS:jvm只是调优的一部分,调优还应包含(不限于):网络架构、中间件调优、数据库调优等

--- 共有 1 条评论 ---
红魔小贝agree 调优是针对项目的软硬件而言的,我理解的jvm调优包括垃圾收集器选择(以CPU和项目的关注点:吞吐量-响应时间-停顿时间),新生代老年代内存比例。参数都没有最好只有最适合 1年前 回复
出现OOM,首先你的服务挂掉了,可以通过JDK自带的一些工具去分析,如Jmap,Jstat,Jconsole等,可以利用这些去查看JVM内存使用情况,利用MAT去分析是什么导致内存溢出的。去优化代码,调整数据库等操作。
jvm调优是为了让程序尽量少的进行FULL GC,如果单纯的minor GC对jvm的性能来说是影响很少的,当jvm在处理FULL GC的时候可能会导致线程被占用无法为用户服务,这个对用户来说是不能接受的,至于详细的内容你可以去看一下这本书《深入理解Java虚拟机:JVM高级特性与最佳实践.周志明》,既然做了开发就要去多了解相关技术,面试官不是随随便便问你,说实在的,对于程序员来说并不一定要关注jvm调优,但是你有对这些技术的兴趣和下心思去了解,面试官肯定会觉得你是真的是去做java开发的,说明你本人有向更高端的技术去实践的动机,要是啥都不了解,平时不看书也不关注技术,那随随便便招个应届生不一样可以做事,而且还便宜。
顶部