【Java】Java VisualVM初探——【本地】

一、问题

经同事介绍,开始了解到Java VisualVM这个java自带的java运行监控管理工具;现在先了解下它;因为没有实际调试过,所以如有纰漏,请多多指教;

二、详解

1、首先,进入首页我们能看到这个图
【Java】Java VisualVM初探——【本地】_第1张图片
很遗憾,这里好多链接已经失效,点击效果图如下:
【Java】Java VisualVM初探——【本地】_第2张图片
2、然后我们看到左边的菜单栏【本地】
这里,是该工具自动搜索到你本地使用的一些java的软件信息,例如我用的是IntelliJ Idea,所以这里显示了IntelliJ Idea中的java信息,如果你使用的是Eclipse编程工具,则这里会显示【Eclipse】软件中java的一些信息;
【Java】Java VisualVM初探——【本地】_第3张图片
3、概述-JVM参数
①、PID
这里显示PID为12920,我们差一下12920是不是IntelliJ IDEA在使用的java进程;首先查看所有进程;

netstat -ano

②、然后查找该端口对应的服务:

netstat -ano|findstr "12920"

【Java】Java VisualVM初探——【本地】_第4张图片
这里,我在任务管理器查找,没有12920端口的任何进程,结合下图显示的java_home目录,所以,这里的12920应该只是IntelliJ自带的java所预留的进程;

其他的一些参数如图:
【Java】Java VisualVM初探——【本地】_第5张图片

这里,着重讲几个参数:
①、OOME
即【内存溢出】,即Out Of Memory Error;杯子只能装1L水,你倒了2L,结果水就溢出来;
导致内存溢出的原因有:
1、内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2、集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3、代码中存在死循环或循环产生过多重复的对象实体;
4、使用的第三方软件中的BUG;
5、启动参数内存值设定的过小;
相关知识,有兴趣的可以看这里

②、JVM参数
JVM启动参数共分为三类;

1>是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;

2>是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;

3>是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;

因为JVM内存被分成多个独立的部分。广泛地说,JVM堆内存被分为两部分——年轻代(Young Generation)和老年代(Old Generation)。英文出处详情见【Java (JVM) Memory Model – Memory Management in Java】
;中文出处见【Java内存与垃圾回收调优】

-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djb.vmOptionsFile=C:\softWareInstalled\work\IntelliJ IDEA 2017.2.4\bin\idea64.exe.vmoptions
-Xbootclasspath/a:C:\softWareInstalled\work\IntelliJ IDEA 2017.2.4\lib\boot.jar
-Didea.jre.check=true
-Didea.paths.selector=IntelliJIdea2017.2
-XX:ErrorFile=C:\Users\Auther\java_error_in_idea_%p.log
-XX:HeapDumpPath=C:\Users\Auther\java_error_in_idea.hprof

说明
1、-Xms128m:JVM最小Heap内存128M;

2、-Xmx750m:JVM最大Heap内存750M;

3、-XX:ReservedCodeCacheSize=240m:预留编码缓存大小240M;

4、-XX:+UseConcMarkSweepGC:并发标记清除(CMS)收集器;CMS收集器也被称为短暂停顿并发收集器。它是对年老代进行垃圾收集的。CMS收集器通过多线程并发进行垃圾回收,尽量减少垃圾收集造成的停顿。CMS收集器对年轻代进行垃圾回收使用的算法和Parallel收集器一样。这个垃圾收集器适用于不能忍受长时间停顿要求快速响应的应用。可使用 -XX:ParallelCMSThreads=n JVM选项来限制CMS收集器的线程数量。

5、-XX:SoftRefLRUPolicyMSPerMB=50:指定每兆堆空闲空间的 soft reference 保持存活(一旦它不强可达了)的毫秒数,这意味着每兆堆中的空闲空间中的 soft reference 会(在最后一个强引用被回收之后)存活1秒钟。注意,这是一个近似的值,因为 soft reference 只会在垃圾回收时才会被清除,而垃圾回收并不总在发生。系统默认为一秒,如果觉得没必要等1秒,客户集中不用就立刻清除,改为 -XX:SoftRefLRUPolicyMSPerMB=0;【出处】

6、-ea:用-ea可打开断言机制,不加和classname时运行所有包和类中的断言,如果希望只运行某些包或类中的断言,可将包名或类名加到-ea之后。例如要启动包com.wombat.fruitbat中的断言,可用命令java-ea:com.wombat.fruitbat…。。-da是用来关闭断言机制;【出处】
7、-Dsun.io.useCanonCaches=false:使用标准缓存;
8、-Djava.net.preferIPv4Stack=true:使用IP地址的第4版协议;
9、-XX:+HeapDumpOnOutOfMemoryError:当内存溢出时,启动堆Dump;
10、-XX:-OmitStackTraceInFastThrow:快速抛异常,忽略异常追踪;
11、-Djb.vmOptionsFile=C:\softWareInstalled\work\IntelliJ IDEA 2017.2.4\bin\idea64.exe.vmoptions:虚拟机选项文件,当前java虚拟机选项所在路径;
13、-Xbootclasspath/a:C:\softWareInstalled\work\IntelliJ IDEA 2017.2.4\lib\boot.jar:启动引导类路径;
14、-Didea.jre.check=true:java run envirnment 环境检查;
15、-Didea.paths.selector=IntelliJIdea2017.2:选择器路径;
16、-XX:ErrorFile=C:\Users\Auther\java_error_in_idea_%p.log:error文件路径;
17、-XX:HeapDumpPath=C:\Users\Auther\java_error_in_idea.hprof:堆Dump路径;

③、系统参数
略;

4、监视
这里,可以看到列出来的几个java进程的实时线程和守护线程的状况;
【Java】Java VisualVM初探——【本地】_第6张图片

5、线程图
可以看到各个模块使用线程的状况;目前所有的线程都是一马平川,没有太多变化,应为后台java更本没有使用:
【Java】Java VisualVM初探——【本地】_第7张图片

三、总结
因为是朋友介绍才知道这个东西的,所以本文章只是知道有这么个东西的存在,有哪些功能,因为还没设计到JVM性能调优,所以不敢妄言,先挖个坑,日后再填;

你可能感兴趣的:(【提高】,【JavaEE】,【JavaScript】,【IntelliJ,IDEA】,Java,VisualVM,JVM,VisualVM,VM,visual,machina)