![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
铠甲蘑菇
这个作者很懒,什么都没留下…
展开
-
JVM内存区域划分
JVM在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖线程的启动和结束而建立和销毁。 有方法区,堆,虚拟机栈,本地方法栈,程序计数器。其中方法区和堆是线程共享的,虚拟机栈、本地方法栈和程序计数器是线程私有的。 程序计数器可以看做是当前线程所执行的字节码的行号指示器原创 2016-02-13 18:26:00 · 343 阅读 · 0 评论 -
JVM参数设置
-Xms 设置堆的最小值-Xmx 设置堆的最大值将-Xms和-Xmx值设置为一样可避免堆自动扩展-XX:+HeapDumpOnOutOfMemoryError 设置虚拟机在出现内存溢出是Dump出当前的内存堆转储快照以便事后进行分析-Xss设置每个线程的栈容量Java 7的 永久代(PermGen)到Java 8后换成了元空间(Metaspace) -XX:PermSize -XX:Met原创 2016-02-13 18:41:37 · 767 阅读 · 0 评论 -
JVM如何判断对象是否需要被回收
JVM判断一个对象是否存活用的是可达性分析而不是引用计数法 引用计数法 引用计数法思路是这样的,给对象添加一个引用计数器,有地方引用时,计数器就加1;当引用失效时就减1;当计数为0的时候就判定对象需要被回收 引用计数法有一个难以解决的问题就是相互循环引用问题。 例: obj1.instance=obj2.instance;obj2.instance=obj1.instance; 可达性分...原创 2016-02-14 21:57:19 · 3325 阅读 · 2 评论 -
jvm 查看异常代码
1、top //查看占用cpu最高的PID 2、ps -mp $PID -o THREAD,tid,time | sort -rn //获取排前面的线程TID 3、printf "%x\n" $TID //转为16进制,得到$data 4、jstack 11209 |grep 2d5c原创 2016-12-23 15:33:41 · 612 阅读 · 0 评论 -
JVM 统计监测工具
jps -v 获取Java进程id jstack -pid >>thread.txt 将当前线程dump输出到thread.txt文件 jmap -histo:live pid >>heap.txt 打印每个class的实例数目,内存占用,类全名信息,输出到 heap.txt jmap -dump:live,format=b,file=原创 2016-02-15 22:31:30 · 494 阅读 · 0 评论 -
CPU 100% 问题定位
1.先用top定位最耗cpu的java进程 例如: 12430 2.然后用top -p 12430 -H 定位到最耗cpu的线程 的ID 例如:12483 3.把第二步定位的线程ID ,转成16进制,printf "%x\n" 12483 得到 :30c3 4.从jstack 输出的线程快照中找到线程的对堆栈信息 jstack 12430 |grep 30c3 -A原创 2017-04-12 11:57:40 · 1456 阅读 · 0 评论