版权声明
转自
http://blog.csdn.net/lxb_champagne/article/details/18352945
JMAP 输出
jmap -histo 24527 | head -30
num #instances #bytes class name
----------------------------------------------
1: 31939 98883072 [C
2: 8594 9461992 [B
3: 30326 4256232 <constMethodKlass>
4: 30326 3892592 <methodKlass>
5: 2719 3226344 <constantPoolKlass>
6: 2450 1948704 <constantPoolCacheKlass>
7: 2719 1869200 <instanceKlassKlass>
8: 27599 662376 java.lang.String
9: 836 442968 <methodDataKlass>
10: 8215 394320 org.apache.tomcat.util.buf.ByteChunk
11: 3012 366720 java.lang.Class
12: 11257 360224 java.util.HashMap$Entry
13: 3417 273360 java.lang.reflect.Method
14: 6763 270520 java.util.TreeMap$Entry
15: 4326 260720 [S
16: 5410 259680 org.apache.tomcat.util.buf.MessageBytes
17: 6410 256400 org.apache.tomcat.util.buf.CharChunk
18: 4558 238352 [[I
19: 3347 211512 [Ljava.lang.Object;
20: 2144 189280 [I
21: 276 147936 <objArrayKlassKlass>
22: 948 142216 [Ljava.util.HashMap$Entry;
23: 2874 137952 java.util.HashMap
24: 621 89424 java.text.DecimalFormat
25: 2555 81760 java.util.concurrent.ConcurrentHashMap$HashEntry
26: 620 69440 java.util.GregorianCalendar
27: 1052 68936 [Ljava.lang.String;
其中:
[C is a char[]
[S is a short[]
[I is a int[]
[B is a byte[]
[[I is a int[][]
上面的输出中[C对象占用Heap这么多,往往跟String有关,String其内部使用final char[]数组来保存数据的。
constMethodKlass/ methodKlass/ constantPoolKlass/ constantPoolCacheKlass/ instanceKlassKlass/ methodDataKlass
与Classloader相关,常驻与Perm区。
分享到:
相关推荐
检查`jmap`或JVisualVM等工具的内存使用情况,优化`-Xms`和`-Xmx`设置,以避免频繁的GC。 3. **线程池配置**:Tomcat使用线程池来处理请求。如果线程池配置不当,比如最大线程数限制过小,当达到上限时,新的请求将...
例如,在Windows上可以使用DbgView来捕获应用程序的日志输出。 #### 十三、自定义诊断工具 针对特定场景,开发者可能需要编写自定义的诊断工具来更好地满足调试需求。这通常涉及到编写脚本或小工具来收集特定的信息...
此外,ss命令是另一种可以用来检查网络连接和socket信息的工具,它的输出结果与netstat相似,但在某些情况下更为高效。 针对Java应用服务器,排查问题时常用的工具还包括jps、jstack、jmap和jstat等。jps命令可以列...
在实际工作中,我学会了使用JDK自带的JVisualVM、jstack和jmap等工具进行性能分析和问题定位,同时也了解了Java内存模型和垃圾回收机制,以此优化应用性能。 通过这份工作总结记录,我不仅回顾了自己的学习历程,也...
在传统的Bug分析手段中,虽然控制台输出和代码阅读也能提供一些帮助,但它们往往信息量不足,无法详细反映程序运行的全貌,特别是在涉及到多线程并发和内存管理问题时。JavaDump的出现,正是为了解决这些问题,它能...
`jstat`和`jmap`是两款强大的JVM监控工具,前者用于实时监控JVM的内存、垃圾收集和类加载状态,后者可以输出堆内存的详细信息,包括对象分配和存活情况。 了解并掌握Java内存管理有助于优化应用程序性能,避免内存...
`jstack`能够输出Java应用中所有线程的当前堆栈跟踪,帮助我们找出可能导致CPU过载的代码段。在分析结果中,查找执行时间较长或者状态异常的线程,如"等待锁"、"运行"或"BLOCKED"状态的线程,这些都可能是问题的源头...
1. 输入一个正整数,计算并输出距离它最近的对称数 对称数是指从左向右读和从右向左读都一样的数字,例如121、1221等。要找到一个数n的最近对称数,可以考虑将n转换为字符串,然后反转字符串,比较两者差异,取较小...
找出CPU占用率高的线程后,记录下其线程ID。线程ID是定位问题的关键,因为进程内部的线程可能有多个,每个线程都有自己的执行路径。 接下来,使用`jstack`命令对目标进程进行线程堆栈跟踪。`jstack`是Java提供的一...
Java 13允许事件流直接输出到标准输出或网络,方便进行实时监控和故障排查。 4. **Default CDS Archives (JEP 353)**: 默认的类数据共享(CDS)归档文件简化了应用启动时的类加载过程,提升了启动速度。Java 13将...
2. **`jmap`工具**:可以输出堆内存的详细信息,包括对象分布、内存区域大小等,辅助分析内存泄漏。 3. **`jhat`或`VisualVM`**:这些是更强大的内存分析工具,可以对`hprof`文件进行可视化分析,找出内存占用高的...
12. **java飞行记录仪(jfr)** 和 **jmc(Java Mission Control)** Oracle JDK 提供的高级诊断和监控工具,用于捕获和分析性能数据。 以上就是 Java 2 应用命令的基本介绍,熟练掌握这些命令对于 Java 开发者来说至...
- `-XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime`: 输出年龄分布和应用停止时间,用于分析GC行为。 在优化过程中,`jcmd`用于查看JVM的详细信息,`jinfo`可以获取JVM的配置参数,`ps`命令则...
监控进程和内存的工具有很多种,例如`sysstat`套件包含的`sar`能够记录和报告系统活动,包括进程创建速率和内存使用趋势。`iftop`显示网络带宽使用,同时也能反映出进程对网络资源的消耗。`memcached`或`redis`这类...
使用`jmap`或`MAT (Memory Analyzer Tool)`可以分析堆转储文件,查找内存泄漏的根源。 5. **系统工具**: - `proc`工具集:在Linux系统中,`/proc`目录提供了进程信息,可以帮助了解Java进程的状态。 - `truss/...
这涉及到使用JDK自带的工具如`jstat`、`jmap`、`jhat`和`jfr`(Java飞行记录器)等。 4. **垃圾回收**:垃圾回收是Java性能管理的重要方面,指南提供了关于不同垃圾收集器的详细信息,如G1、Shenandoah、ZGC等,...
- **日志记录**: - `-verbose:gc`: 输出垃圾回收的日志。 - `-XX:+PrintGCDetails`: 输出更详细的GC信息。 - **其他参数**: - `-XX:+HeapDumpOnOutOfMemoryError`: 当内存溢出时生成堆转储文件。 - `-XX:Heap...
6. **日志打印过多**:过于频繁的日志输出也可能消耗大量CPU资源,尤其是当使用同步日志记录器时。考虑调整日志级别或采用异步日志框架。 7. **代码效率低**:低效的算法或不恰当的数据结构使用,如过多的同步块,...