JVM虚拟机调优简单分析

时间:2021-07-16 | 标签: | 作者:Q8 | 来源:网络

小提示:您能找到这篇{JVM虚拟机调优简单分析}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的JVM虚拟机调优简单分析内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

 

        内存溢出和内存泄漏是什么,是怎么发生的的呢?内存溢出和内存泄漏它们的区别是什么?应该怎么做防护措施呢?小编接介绍一下吧。

  内存溢出和内存泄漏有什么区别:

  内存泄漏是由于使用不当,把一部分内存“丢掉了”,导致这部分内存不可用。



  当在经典网络推广案例堆中创建了对象,后来没有使用这个对象了,又没有把整个对象的相关引用设为null。此时垃圾收集器会认为这个对象是需要的,就不会清理这部分内存。这就会导致这部分内存不可用。

  所以内存泄漏会导致可用的内存减少,进而会导致内存溢出。

  内存泄露问题排查方法:

  用visualVM工具分析堆快照 ,如果发生内存泄漏:



  step1:找出泄漏的对象

  step2:找到泄漏对象的GC Root

  step3:根据泄漏对象和GC Root找到导致内存泄漏的代码

  step4:想法设法解除泄漏对象与GCRoot的连接

  如果不存在泄漏:

  看下是否能增大jvm堆公司代运营的最大容量,优化程序,减小对象的生命周期

  前期准备:

  当发生堆溢出的时候,可以让程序在崩溃时产生一份堆内存快照

  产生堆内存快照的方法:

  给jvm加上参数XX:+HeapDumpOnOutofMemoryError,这样就会在程序崩溃的时候,产生一份堆内存快照

  分析堆内存快照我建议用jdk自带的可视化监视工具visualVM,位置在jdk安装目录下的bin,如果是在Linux环境的话,可以把快照传到window。因为分析工具会占用很大的内存,不建议在服务端进行分析。

  解决方法:

  针对StackOverflowError:

  1.首先栈溢出会输出异常信息,根据信息查看对应的方法调用是否出现无限调用、或者栈帧过大等代码逻辑上的问题,通过修改代码逻辑解决;

  2.如果确确实实需要更大的栈容量,可以检查并调大栈容量:-Xss16m。

  内存泄露的迹象:老年代每次垃圾回收的时候,总是不能全部回收,一次比一次占用的内存多。

  针对OutOfMemoryError:

  首先检查是否创建过多的线程,减少线程数

  有了堆信息查看方面的功能,我们一般可以顺利解决以下问题:

  --年老代年轻代大小划分是否合理

  --内存泄漏

  --垃圾回收算法设置是否合理

  内存泄漏的现象:

  常常地,程序内存泄漏的最初迹象发生在出错之后,在你的程序中得到一个OutOfMemoryError。

  这种典型的情况发生在产品环境中,而在那里,你希望内存泄漏尽可能的少,调试的可能性也达到最小。

  一个OutOfMemoryError常常是内存泄漏的一个标志,有可能应用程序的确用了太多的内存;这个时候,你既不能增加JVM的堆的数量,也不能改变你的程序而使得他减少内存使用。

  但是,在大多数情况下,一个OutOfMemoryError是内存泄漏的标志。一个解决办法就是继续监听GC的活动,看看随时间的流逝,内存使用量是否会增加,如果有,程序中一定存在内存泄漏。

 
JVM虚拟机调优简单分析

上一篇:什么是Java虚拟机
下一篇:java 虚拟机10:类加载器


版权声明:以上主题为“JVM虚拟机调优简单分析"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
扫码咨询
    JVM虚拟机调优简单分析
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“JVM虚拟机调优简单分析”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通JVM虚拟机调优简单分析的相关事宜。

关键词:JVM虚拟机调优简单分析

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:545321@QQ.com
电话:400-021-1330 | 客服QQ:545321
沪ICP备12034177号 | 沪公网安备31010702002418号