🐕JVM
文章平均质量分 87
JVM从入门到入土
共饮一杯无
CSDN内容合伙人,杭州开发者社区主理人,Java领域优质创作者,2022年度博客之星TOP15,CSDN博客专家,51CTO 专家博主,华为云享专家,阿里云专家博主,InfoQ专家博主,持续输出干货,欢迎关注。
鲜衣怒马意气风发,愿你归来仍是少年。
展开
-
页面请求频繁导致Http11OutputBuffer触发OOM解决
居然被配置成了100MB,默认值是8KB,所以我暂且把这块注释掉,让它使用默认值,Jenkins重新构建发布项目后,同时多人测试验证,没有再出现nginx 502问题,应用程序也没有再出现OOM异常。查看最大占比的内存消费都指向了tomcat下面的包,最大的一些对象看到基本上都是100MB,还都与请求相关,所以接下来查看是不是哪里配置了这个,因为都是100MB还指向接口也太巧了。可以看到两个泄露疑点,都占了400M,指向的都是普通的接口请求,这是为啥?:对象本身的大小 + 引用的其他对象的大小。原创 2022-11-10 11:12:33 · 7486 阅读 · 9 评论 -
JVM之VisualVM工具的使用
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。原创 2022-10-27 09:23:48 · 3303 阅读 · 16 评论 -
JVM之jstack实战死锁问题
这个条件占用部分资源的线程进一步申请其他资源时,如果申请不到可以主动释放它占有的资源,这样不可抢占这个条件就破坏掉了。线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁。编写代码,启动2个线程,Thread1拿到了obj1锁,准备去拿obj2锁时,obj2已经被Thread2锁定,所以发送了死锁。,即存在一个等待队列:T1等待占有T2的资源,T2等待占有T3的资源,T3等待占有T1的资源。这样就形成了一个等待环路。,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。原创 2022-10-10 10:19:25 · 1643 阅读 · 16 评论 -
JVM之jstack的使用和解析
另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如。由于程序是正常运行的,没有任何的输出,从日志方面也看不出什么问题,所以就需要看下jvm的内部线程的执行情况,然后再进行分析查找出原因。这个时候,就需要借助于。原创 2022-10-08 15:58:24 · 2035 阅读 · 0 评论 -
JVM实战:内存溢出的定位与分析
如果出现了内存溢出,首先我们需要定位到发生内存溢出的环节,并且进行分析,是正常还是非正常情况,如果是正常的需求,就应该考虑加大内存的设置,如果是非正常需求,那么就要对代码进行修改,修复这个bug。内存溢出在实际的生产环境中经常会遇到,比如,不断的将数据写入到一个集合中,出现了死循环,读取超大的文件等等,都可能会造成内存溢出。分析:这个可疑是正确的,因为已经有88%的内存都被它占有,这是非常有可能出现内存溢出的。为了演示效果,我们将设置执行的参数,这里使用的是Idea编辑器。接下来,我们模拟内存溢出的场景。原创 2022-10-08 13:44:42 · 1860 阅读 · 9 评论 -
JVM-通过MAT工具对dump文件进行分析
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止 了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。原创 2022-10-06 06:15:00 · 8118 阅读 · 11 评论 -
JVM之jmap的使用以及内存溢出分析
命令搭配使用,用于分析jmap生成的heap dump文件(堆转储快照)。jhat内置了一个微型的HTTP/HTML服务器,对生成的dump文件分析后,可以在浏览器中查看分析结果。除此以外,jmap命令还可以查看finalize执行队列、Java堆和方法区的详细信息,比如空间使用率、当前使用的什么垃圾回收器、分代情况等等。我们将jvm的内存dump到文件中,这个文件是一个二进制的文件,不方便查看,这时我们可以借助于。可以获取到更加详细的内容,如:内存使用情况的汇总、对内存溢出的定位与分析。原创 2022-10-05 06:00:00 · 2021 阅读 · 4 评论 -
JVM之通过jstat命令进行查看堆内存使用情况
jstat是JDK自带的一个轻量级小工具。它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]命令可以查看堆内存各部分的使用量,以及加载类的数量。option 可以从下面参数中选择。如有错误❌疑问💬欢迎各位指出。本文内容到此结束了,原创 2022-10-04 21:53:56 · 5541 阅读 · 38 评论 -
jdk1.7和jdk1.8的堆内存模型
jvm的内存模型在1.7和1.8有较大的区别,虽然本文是以1.8为例进行讲解,但是我们也是需要对1.7的内存模型有所了解。原创 2022-10-03 05:30:00 · 625 阅读 · 10 评论 -
查看jvm的运行参数
解压安装包,执行bin目录下的startup.bat(linux环境执行startup.sh)首先,启动一个tomcat用于测试,来观察下运行的jvm参数。第一,运行java命令时打印出运行参数;第二,查看正在运行的java进程的参数;如果想要查看正在运行的jvm就需要借助于。如有错误❌疑问💬欢迎各位指出。本文内容到此结束了,原创 2022-10-02 05:45:00 · 5281 阅读 · 0 评论 -
JVM运行参数之-X和-XX参数
Xms512m:等价于-XX:InitialHeapSize,设置JVM初始堆内存为512M。适当的调整jvm的内存大小,可以充分利用服务器资源,让程序跑的更快。-Xmx2048m:等价于-XX:MaxHeapSize,设置JVM最大堆内存为2048M。表示新生代和老年代的比值,表示新生代占1,老年代占2。JVM的-X参数是非标准参数,在不同版本的jvm中,参数可能会有所不同,可以通过。-XX参数也是非标准参数,主要用于JVM的调优和debug操作。分别是设置jvm的堆内存的初始大小和最大大小。原创 2022-10-01 10:30:59 · 1816 阅读 · 3 评论 -
为什么需要对jvm进行优化,jvm运行参数之标准参数
如果是其他操作系统上,机器配置有2GB以上的内存同时有2个以上CPU的话默认使用server模式,否则使用client模式。在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行。它们的区别是Server VM的初始堆空间会大一些,默认使用的是并行垃圾回收器,启动慢运行快。如果是Windows系统,不论硬件配置如何,都默认使用Client类型的JVM。jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变,可以使用。说明:使用的jdk版本为1.8。检索出所有的标准参数。原创 2022-09-30 13:01:11 · 949 阅读 · 2 评论 -
面试官:可以说下Java内存模型(JMM)吗
什么是JMMJava内存模型规范规定了一个线程如何和何时可以看到其他由线程修改过的共享变量的值,以及在必须时如何同步的访问共享变量。Java 内存模型(Java Memory Model,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了 Java 程序在各种平台下对内存的访问都能保证效果一致的机制及规范。Java内存模型图:Java内存模型名词解释:Thread Stack:线程栈 Local variable:本地变量 Object:对象 Heap:堆原创 2022-03-25 13:49:02 · 16460 阅读 · 0 评论 -
Java class类文件和类加载器详解以及代码优化
Java class类文件和类加载器详解以及Java代码优化原创 2022-02-24 10:50:33 · 16418 阅读 · 0 评论