java代码获取gc次数 java获取数据

java 关于gc问题您好,提问者:
我选择1 。原因如下:
1、当X[] a = new X[3];这个时候已经在内存中生成了,a的hashCode地址长度3的堆内存 。
2、当a[1]=null的时候,其实是把a=1的角标设置为null,其实X[] a = new X[3];a 0 1 2都没有赋值,指向都为null 。
补充:就算我们调用了System.gc()方法,JVM线程也不会立马执行,只能起到一个通知JVM回收的作用 。
java怎么避免BufferedReader读取文件频繁的gc 。代码如下 。BufferedReader 的缓存开大一点;
或者如果确定文件大小,一次性读进一个byte[]用ByteArrayInputStream 包起来
如何查看java虚拟机堆内存的参数值请确保java_home/bin配置到path环境变量下,因为这些工具都在jdkjava代码获取gc次数的bin目录下
jps(JVM Process Status Tool):JVM机进程状况工具
用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID , 进程启动的路径等等 。与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java程序,并显示他们的进程号 。使用jps时,不需要传递进程号做为参数 。
Jps也可以显示远程系统上的JAVA进程,这需要远程服务上开启java代码获取gc次数了jstat服务,以及RMI注及服务,不过常用都是对本对的JAVA进程的查看 。
命令格式:jps [ options ] [ hostid ]
常用参数说明:
-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null 。
-l 输出应用程序主类的完整包名 , 或者是应用程序JAR文件的完整路径 。
-v 输出传给JVM的参数 。
例如:
C:\Users\Administratorjps -lmv
1796-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -XX:MaxPermSize=256m
7340 sun.tools.jps.Jps -lmv -Denv.class.path=.;D:\DevTools\VM\jdk1.6.0_31\\lib\dt.jar;D:\DevTools\VM\jdk1.6.0_31\\lib\tools.jar; -Dapplication.home=D:\DevTools\VM\jdk1.6.0_31 -Xms8m
其中pid为1796的是我的eclipse进程,pid为7340的是jps命令本身的进程
jinfo(Configuration Info for Java):JVM配置信息工具
可以输出并修改运行时的java 进程的opts 。用处比较简单,用于输出JAVA系统参数及命令行参数
命令格式:jinfo [ options ] [ pid ]
常用参数说明:
-flag输出,修改,JVM命令行参数
例如:
C:\Users\Administratorjinfo 1796
将会打印出很多jvm运行时参数信息 , 由于比较长这里不再打印出来 , 可以自己试试 , 内容一目了然
Jstack(Stack Trace for Java):JVM堆栈跟踪工具
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息 , 如果是在64位机器上,需要指定选项"-J-d64“
命令格式:jstack [ option ] pid
常用参数说明:
-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m 打印java和native c/c框架的所有栈信息.
-h | -help打印帮助信息
例如:
C:\Users\Administratorjstack 1796
2013-05-22 11:42:38
Full thread dump Java HotSpot(TM) Client VM (20.6-b01 mixed mode):
"Worker-30" prio=6 tid=0x06514c00 nid=0x1018 in Object.wait() [0x056af000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
- locked 0x1ad84a90 (a org.eclipse.core.internal.jobs.WorkerPool)
at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)
......
......
......
......
jstat(JVM statistics Monitoriing Tool):JVM统计信息监视工具
对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控
命令格式:jstat [ optionpid [interval [ s | ms ] [count] ] ]
常用参数说明:
-gcutil输出已使用空间占总空间的百分比
-gccapacity 输出堆中各个区域使用到的最大和最小空间
例如:每隔1秒监控jvm内存一次 , 共监控5次
C:\Users\Administratorjstat -gccapacity17961s5
NGCMNNGCMXNGCS0CS1CECOGCMNOGCMXOGCOCPGCMNPGCMXPGCPCYGCFGC
13632.0 174720.040896.0 4032.0 4032.032832.027328.0349568.081684.081684.012288.0 262144.080640.080640.04296
13632.0 174720.040896.0 4032.0 4032.032832.027328.0349568.081684.081684.012288.0 262144.080640.080640.04296
13632.0 174720.040896.0 4032.0 4032.032832.027328.0349568.081684.081684.012288.0 262144.080640.080640.04296
13632.0 174720.040896.0 4032.0 4032.032832.027328.0349568.081684.081684.012288.0 262144.080640.080640.04296
13632.0 174720.040896.0 4032.0 4032.032832.027328.0349568.081684.081684.012288.0 262144.080640.080640.04297
C:\Users\Administratorjstat -gcutil17961s5
S0S1EOPYGCYGCTFGCFGCTGCT
0.000.000.5253.3599.77420.5139938.11938.632
0.000.000.5253.3599.77420.5139938.11938.632
0.000.000.5253.3599.77420.5139938.11938.632
0.000.000.5253.3599.77420.5139938.11938.632
0.000.000.5253.3599.77420.5139938.11938.632
一些术语的中文解释:
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
PC:Perm(持久代)的容量 (字节)
PU:Perm(持久代)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
NGCMN:年轻代(young)中初始化(最小)的大小 (字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量 (字节)
OGC:old代当前新生成的容量 (字节)
PGCMN:perm代中初始化(最小)的大小 (字节)
PGCMX:perm代的最大容量 (字节)
PGC:perm代当前新生成的容量 (字节)
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
P:perm代已使用的占当前容量百分比
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)
TT: 持有次数限制
MTT : 最大持有次数限制
jmap( Memory Map for Java):JVM内存映像工具
打印出某个java进程(使用pid)内存内的所有‘对象’的情况(如:产生那些对象,及其数量)
命令格式:jmap [ option ] pid
常用参数说明:
-dump:[live,]format=b,file=filename 使用二进制形式输出jvm的heap内容到文件中,live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
例如:以二进制形式输入当前堆内存映像到文件data.hprof中
jmap -dump:live,format=b,file=data.hprof 1796
生成的文件可以使用jhat工具进行分析 , 在OOM(内存溢出)时,分析大对象,非常有用
通过使用如下参数启动JVM,也可以获取到dump文件:
-XX: HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./java_pidpid.hprof
在jvm发生内存溢出时生成内存映像文件
jhat(JVM Heap Analysis Tool):JVM堆转储快照分析工具
用于对JAVA heap进行离线分析的工具,他可以对不同虚拟机中导出的heap信息文件进行分析 , 如LINUX上导出的文件可以拿到WINDOWS上进行分析,可以查找诸如内存方面的问题 。
命令格式:jhat dumpfile(jmap生成的文件)
例如:分析jmap导出的内存映像
jhat data.hprof
执行成功后,访问即可查看内存信息,
MAT(Memory Analyzer Tool):一个基于Eclipse的内存分析工具
官网:
update:
这是eclipse的一个插件,安装后可以打开xxx.hprof文件,进行分析,比jhat更方便使用,有些时候由于线上xxx.hprof文件过大,直接使用jhat进行初步分析了,可以的话拷贝到本地分析效果更佳 。
图形化监控工具:
在JDK安装目录bin下面有两个可视化监控工具
1. JConsole(Java Monitoring and Management Console) 基于JMX的可视化管理工具 。
2. VisualVM(All-in-one Java Troubleshooting Tool)随JDK发布的最强大的运行监视和故障处理程序 。
推荐使用VisualVM , 他有很多插件,可以更方便的监控运行时JVM
【java代码获取gc次数 java获取数据】java代码获取gc次数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java获取数据、java代码获取gc次数的信息别忘了在本站进行查找喔 。

    推荐阅读