JVM
OMGLionKkkk
这个作者很懒,什么都没留下…
展开
-
垃圾收集器
一个Tomcat就是一个进程,配置一个jvm参数。安全点:当线程执行到安全点的时候会校验GC标记,如果标记为1的话,操作系统会将当前线程挂起,当所有用户线程挂起的时候开始GC。原创 2022-01-13 21:50:09 · 75 阅读 · 0 评论 -
内存泄漏怎么分析
1.使用top命令,首先分析CPU占用比较高的线程的代码场景中分页查询大数据量的时候,一页数据过多时,User对象中变量定义大的话,会占用很大内存。原创 2022-01-13 20:57:53 · 495 阅读 · 0 评论 -
Class常量池、字符串常量池与运行时常量池 对象池
一 、Class常量池:是Class文件中的资源仓库,Class文件中除了包含类的版本 字段 方法 接口等描述信息外,还有一项信息就是常量池:用于存放编译期生成的各种字面量和符号引用。二 、常量池:用于存放编译期生成的各种字面量和符号引用。使用 javap -v 类.class 将16进制的字节码文件,生成可读的的JVM字节码指令文件。加载到内存的时候变成运行时常量池。三、字符串常量池...原创 2022-01-10 21:49:06 · 164 阅读 · 0 评论 -
JVM调优工具,GC日志分析确定Full GC原因
Java VisualVM:查看各个分区的变化情况Arthas:下载一个jar包,arthas-boot.jar,通过命令运行 java -jar arthas-boot.jar回车之后查看系统中运行的Java进程。命令使用:1.dashboard:查看Java进程下的各个线程的运行情况 state cpu,以及内存各个区域的使用情况2,Thread tid:查看有问题代码的位置3.Thread -b:查看死锁的线程4.jad 类全路径.类名查看类的内原创 2022-01-09 16:16:34 · 1595 阅读 · 0 评论 -
JVM的内存模型(运行时数据区 )
JDK结构:Java程序最终运行的是二进制的机器码,JVM结构:利用命令查看编译的字节码文件Javap -c name.class字节码执行引擎:修改程序计数器和执行class文件。开启一个线程执行垃圾回收。动态链接:把符号引用转换成直接引用,符号:方法名 变量名。直接引用:方法 变量对应的内存地址,在一个方法内调用另一个方法的时候会去动态链接中获取这个方法的地址。方法出口:在main中调用一个方法,该方法执行完之后,需要知道返回到main中的哪一行。以及处理调用原创 2022-01-09 15:53:00 · 168 阅读 · 0 评论 -
通过常用命令Jstat Jinfo 分析新生代的对象移动到老年代
jinfo 查看jvm参数 :jinfo -flags pid查看Java系统参数:jinfo -sysprops pidJstat可以查看堆内存各部分的使用量,以及加载类的数量。jstat 【-命令选项】【vmid】【间隔时间(毫秒)】【查询次数】 1秒=1000毫秒垃圾回收统计jstat -gc pid 查看程序内存使用及GC压力整体情况查看新生代内存统计 jstat -gcnewcapacity老年代垃圾回收统计 jstat -gcold pid堆内..原创 2022-01-04 22:00:30 · 747 阅读 · 0 评论 -
排查内存orJVM内存飙高
首先用top命令查看各个进程占用的CPU大小1.用jps查看进程id2.jmap 查看内存的信息,实例个数及占用内存的大小1.使用top -p <pid> 显示Java进程的内存情况2.按H 获取每个线程的内存情况33.找到CPU占用过高的线程id4.转为十六进制的线程id,也就是操作系统锁对应的线程id nid5.执行 jstack tid|grep -A 10 nid, 通过管道操作,打印10行Jstack Thread-0 线程名 prio=5 优先级.原创 2022-01-04 21:18:32 · 355 阅读 · 0 评论