[转帖]查看堆内对象的工具:jmap
用途
jmap 可以查看堆内对象的信息,生成 java 程序的 dump 文件,甚至可以查看 ClassLoader 的信息以及 finalizer 队列。
命令格式
jmap [option] <pid> # 连接到正在运行的进程
jmap [option] <executable <core> # 连接到核心文件
jmap [option] [server_id@]<remote server IP or hostname> # 连接到远程调试服务
- 1
- 2
- 3
参数说明:
- pid:目标进程的 PID
- executable:产生 core dump 的 java 可执行程序
- core:被打印信息的 core dump 文件
- server-id:可选的唯一 id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器
- remote server IP or hostname:远程调试服务器的 IP 地址或主机名
option 表示选项参数,常见的选项参数如下:
- no option:查看进程的内存映像信息
- heap:显示堆的详细信息
- histo[:live]:显示堆中对象的统计信息
- clstats:打印类加载器信息
- finalizerinfo:显示在 F-Queue 队列等待 Finalizer 线程执行 finalizer 方法的对象
- dump:<dump-options>:生成堆存储快照
- F:当 -dump 没有响应时,使用 -dump 或者 -histo 参数,在这个模式下,live 子参数无效
- help:帮助信息
- J<flag>:指定传递给运行 jmap 的 JVM 的参数
示例
下面我们来看几个使用 jmap 的例子:
注意,由于博主是在 docker 中执行相应的命令,故在新建并启动容器时要加上 --privileged=true --cap-add=SYS_PTRACE 配置,不然在 docker 中无法执行 jmap。
docker run --privileged=true --cap-add=SYS_PTRACE -d -p 8082:8082 mytest
- 1
一,no option
查看进程的内存映像信息。该命令打印共享对象映射,即打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称。
root@973ba4cf6586:/# jmap 1
Attaching to process ID 1, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.111-b14
0x0000000000400000 6K /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
0x00007f99601cb000 75K /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libnio.so
0x00007f99609de000 94K /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libnet.so
0x00007f9960bf6000 38K /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libmanagement.so
0x00007f9975dd3000 34K /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libzip.so
0x00007f9975fdc000 46K /lib/x86_64-linux-gnu/libnss_files-2.19.so
0x00007f99761e8000 42K /lib/x86_64-linux-gnu/libnss_nis-2.19.so
0x00007f99763f3000 87K /lib/x86_64-linux-gnu/libnsl-2.19.so
0x00007f997660b000 30K /lib/x86_64-linux-gnu/libnss_compat-2.19.so
0x00007f9976813000 191K /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libjava.so
0x00007f9976a43000 74K /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libverify.so
0x00007f9976c56000 31K /lib/x86_64-linux-gnu/librt-2.19.so
0x00007f9976e5e000 87K /lib/x86_64-linux-gnu/libgcc_s.so.1
0x00007f9977074000 1026K /lib/x86_64-linux-gnu/libm-2.19.so
0x00007f9977375000 984K /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
0x00007f9977680000 15805K /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so
0x00007f9978613000 1697K /lib/x86_64-linux-gnu/libc-2.19.so
0x00007f99789be000 14K /lib/x86_64-linux-gnu/libdl-2.19.so
0x00007f9978bc2000 58K /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/jli/libjli.so
0x00007f9978dd1000 106K /lib/x86_64-linux-gnu/libz.so.1.2.8
0x00007f9978fec000 134K /lib/x86_64-linux-gnu/libpthread-2.19.so
0x00007f9979209000 137K /lib/x86_64-linux-gnu/ld-2.19.so
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
二,heap
显示堆的详细信息。使用该选项可以打印一个堆的摘要信息,包括使用的 GC 算法、堆配置信息和各区域内存使用信息。
root@7e2ee19d74ac:/# jmap -heap 1
Attaching to process ID 1, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.275-b01
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 482344960 (460.0MB)
NewSize = 10485760 (10.0MB)
MaxNewSize = 160759808 (153.3125MB)
OldSize = 20971520 (20.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 9502720 (9.0625MB)
used = 7132664 (6.802238464355469MB)
free = 2370056 (2.2602615356445312MB)
75.05918305495689% used
Eden Space:
capacity = 8454144 (8.0625MB)
used = 6412176 (6.1151275634765625MB)
free = 2041968 (1.9473724365234375MB)
75.84654342296511% used
From Space:
capacity = 1048576 (1.0MB)
used = 720488 (0.6871109008789062MB)
free = 328088 (0.31288909912109375MB)
68.71109008789062% used
To Space:
capacity = 1048576 (1.0MB)
used = 0 (0.0MB)
free = 1048576 (1.0MB)
0.0% used
tenured generation:
capacity = 20971520 (20.0MB)
used = 13845136 (13.203750610351562MB)
free = 7126384 (6.7962493896484375MB)
66.01875305175781% used
14836 interned Strings occupying 1393776 bytes.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
三,histo[:live]
显示堆中对象的统计信息,包括了每个 Java 类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个 * 前缀。如果指定了 live 子选项,则只计算活动的对象。
root@7e2ee19d74ac:/# jmap -histo:live 1
.
.
.
.
2481: 1 16 sun.reflect.generics.tree.ByteSignature
2482: 1 16 sun.reflect.generics.tree.CharSignature
2483: 1 16 sun.reflect.generics.tree.DoubleSignature
2484: 1 16 sun.reflect.generics.tree.FloatSignature
2485: 1 16 sun.reflect.generics.tree.IntSignature
2486: 1 16 sun.reflect.generics.tree.LongSignature
2487: 1 16 sun.reflect.generics.tree.ShortSignature
2488: 1 16 sun.reflect.generics.tree.VoidDescriptor
2489: 1 16 sun.security.provider.NativePRNG
2490: 1 16 sun.util.calendar.Gregorian
2491: 1 16 sun.util.locale.provider.AuxLocaleProviderAdapter$NullProvider
2492: 1 16 sun.util.locale.provider.CalendarDataUtility$CalendarWeekParameterGetter
2493: 1 16 sun.util.locale.provider.SPILocaleProviderAdapter
2494: 1 16 sun.util.locale.provider.TimeZoneNameUtility$TimeZoneNameGetter
2495: 1 16 sun.util.resources.LocaleData
2496: 1 16 sun.util.resources.LocaleData$LocaleDataResourceBundleControl
Total 235864 12512632
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
四,clstats
打印类加载器信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。
root@7e2ee19d74ac:/# jmap -clstats 1
Attaching to process ID 1, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.275-b01
finding class loader instances ..done.
computing per loader stat ..done.
please wait.. computing liveness..........................................................................liveness analysis may be inaccurate ...
class_loader classes bytes parent_loader alive? type
<bootstrap> 2026 3553710 null live <internal>
0x00000000ed382638 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed78ed78 1 880 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed299328 1 1473 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed03af80 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed2999a0 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed33deb8 1 1473 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed8bba80 1 1472 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed7d3870 1 1472 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ecdecad0 0 0 null live sun/misc/Launcher\(ExtClassLoader<span class="token annotation punctuation">@0x000000010000fd00</span>
<span class="token number">0x00000000ed78ebe8</span> <span class="token number">1</span> <span class="token number">880</span> <span class="token number">0x00000000ecdbd518</span> dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed2994b8</span> <span class="token number">1</span> <span class="token number">1473</span> <span class="token number">0x00000000ecdbd518</span> dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed23ecb0</span> <span class="token number">1</span> <span class="token number">1472</span> null dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed33e2a0</span> <span class="token number">1</span> <span class="token number">1471</span> <span class="token number">0x00000000ecdbd518</span> dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed3e7e28</span> <span class="token number">1</span> <span class="token number">1472</span> null dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed298db0</span> <span class="token number">1</span> <span class="token number">880</span> <span class="token number">0x00000000ecdbd518</span> dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed33dd28</span> <span class="token number">1</span> <span class="token number">1473</span> <span class="token number">0x00000000ecdbd518</span> dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed5095f0</span> <span class="token number">1</span> <span class="token number">1472</span> <span class="token number">0x00000000ecdbd518</span> dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed78e8d8</span> <span class="token number">1</span> <span class="token number">1472</span> null dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed299008</span> <span class="token number">1</span> <span class="token number">1473</span> <span class="token number">0x00000000ecdbd518</span> dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed33e110</span> <span class="token number">1</span> <span class="token number">1473</span> <span class="token number">0x00000000ecdbd518</span> dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed43d0e0</span> <span class="token number">1</span> <span class="token number">1471</span> <span class="token number">0x00000000ecdbd518</span> dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000ed299580</span> <span class="token number">1</span> <span class="token number">1473</span> <span class="token number">0x00000000ecdbd518</span> dead sun<span class="token operator">/</span>reflect<span class="token operator">/</span>DelegatingClassLoader<span class="token annotation punctuation">@0x000000010000a0a0</span>
<span class="token number">0x00000000eced1140</span> <span class="token number">0</span> <span class="token number">0</span> <span class="token number">0x00000000ecdbd8b0</span> live java<span class="token operator">/</span>util<span class="token operator">/</span>ResourceBundle\)RBClassLoader@0x00000001000b64b0
0x00000000ed299198 1 1473 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed691fd8 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed33df80 1 1473 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed43d270 1 1472 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed8bafb8 1 1472 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed382700 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed78ee40 1 1474 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed299710 1 1473 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed03abb8 1 1472 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed23c518 1 880 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed299a68 1 880 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ecdbd518 3662 5648946 0x00000000ecdbd8b0 live org/springframework/boot/loader/LaunchedURLClassLoader@0x0000000100060a10
0x00000000ed33ddf0 1 1474 null dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed748b30 1 1472 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed7d3938 1 880 null dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed382470 1 1476 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed78ecb0 1 880 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed299260 1 1473 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed0cddc0 1 1472 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed15e2d8 1 1472 null dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed298e78 1 880 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed33dc60 1 880 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed7d3828 1 1472 null dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed78eb20 1 880 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed2993f0 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed2211f8 1 1472 null dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed3e7d60 1 1472 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed6f79b0 0 0 0x00000000ecdbd518 live org/springframework/boot/web/embedded/tomcat/TomcatEmbeddedWebappClassLoader@0x00000001003cec70
0x00000000ed299648 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed298f40 1 1476 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ecdbd8b0 38 63472 0x00000000ecdecad0 live sun/misc/Launcher$AppClassLoader@0x000000010000f958
0x00000000ed33e1d8 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed43d1a8 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed4c6ea0 1 1505 null dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed3827c8 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed78ef08 1 880 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed2997d8 1 1473 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed03a7f0 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed2990d0 1 1471 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed691f10 1 1473 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed33e048 1 1473 0x00000000ecdbd518 dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
0x00000000ed7d3a00 1 880 null dead sun/reflect/DelegatingClassLoader@0x000000010000a0a0
total = 66 5786 9347389 N/A alive=6, dead=60 N/A
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
五,finalizerinfo
打印等待终结的对象信息。
root@7e2ee19d74ac:/# jmap -finalizerinfo 1
Attaching to process ID 1, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.275-b01
Number of objects pending for finalization: 0
- 1
- 2
- 3
- 4
- 5
- 6
可见等候回收的对象为0个。
六,dump:<dump-options>
生成堆存储快照 dump 文件,以 hprof 二进制格式存储 Java 堆到指定 filename 的文件中,如果你指定 live 子选项,堆中只有活动的对象会被存储。
执行这个命令,JVM 会将整个 heap 的信息 dump 写入到一个文件,如果 heap 很大的话,这个过程可能非常耗时,而且会在执行的过程中暂停应用。
root@7e2ee19d74ac:/# jmap -dump:format=b,file=heapdump.hprof 1
Dumping heap to /heapdump.hprof ...
Heap dump file created
- 1
- 2
- 3
[转帖]查看堆内对象的工具:jmap的更多相关文章
- 十二、jdk工具之jcmd介绍(堆转储、堆分析、获取系统信息、查看堆外内存)
目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...
- 设置JVM参数,查看堆大小
1.在eclipse设置JVM参数 打开eclipse-窗口-首选项-Java-已安装的JRE(对在当前开发环境中运行的java程序皆生效,也就是在eclipse中运行的java程序)编辑当前 ...
- [转帖]GitHub上整理的一些工具
GitHub上整理的一些工具 技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 inf ...
- 一文深入了解史上最强的Java堆内缓存框架Caffeine
它提供了一个近乎最佳的命中率.从性能上秒杀其他一堆进程内缓存框架,Spring5更是为了它放弃了使用多年的GuavaCache 缓存,在我们的日常开发中用的非常多,是我们应对各种性能问题支持高并发的一 ...
- IntelliJ IDEA 内置数据库管理工具实战
1. 写在前面 开发Java应用程序,作为明星工具IntelliJ IDEA Ultimate当然是首选,然后进行数据库SQL开发的时候,常常会选择诸如:Navicat , sqlyog, MySQL ...
- Windows下查看局域网内某台计算机的MAC地址
我们知道在局域网中,在Windows下,查看局域网内其他主机的ip和对应mac地址的命令是: arp -a 这样可以看到ip和mac地址的对应关系,还是比较方便的 但是有些时候使用arp命令并不能列出 ...
- 数据库表转换成javaBean对象小工具
package test.utils; import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter; ...
- 一款带Web面板的轻量级、高性能内网穿透工具:nps使用教程
说明:内网穿透工具之前已经介绍了不少了,比如Frp.lanproxy.Holer等,现在再介绍个带Web面板的穿透工具nps,之前叫easyProxy,只是改名了而已,该工具是一款使用go语言编写的轻 ...
- 【译】.NET 对象分配工具
随着 Visual Studio 16.10 的发布,性能分析器又有了一个新的分析引擎,.NET 对象分配工具是第一个加入的工具.这为该工具提供了一些新特性,并显著提高了 perf 性能.在你的 C# ...
- 对象转换工具 MapStruct 介绍
前言 在我们日常开发的分层结构的应用程序中,为了各层之间互相解耦,一般都会定义不同的对象用来在不同层之间传递数据,因此,就有了各种 XXXDTO.XXXVO.XXXBO 等基于数据库对象派生出来的对象 ...
随机推荐
- Midjourney 注册 12 步流程教学
原文: https://bysocket.com/midjourney-register/ 先推荐一个 PromptHero 中文官网 https://promptheroes.cn/ :Prompt ...
- Java 创建/编辑/删除Excel迷你图表
迷你图是Excel工作表单元格中表示数据的微型图表.使用迷你图可以非常直观的显示数据变化趋势,突出最大值.最小值,放在数据表格中可起到很好的数据分析效果.本文将通过Java代码示例介绍如何在Excel ...
- LiteOS:剖析时间管理模块源代码
摘要:Huawei LiteOS的时间管理模块以系统时钟为基础,分为2部分,一部分是SysTick中断,为任务调度提供必要的时钟节拍:另外一部分是,给应用程序提供所有和时间有关的服务,如时间转换.统计 ...
- Solon2 开发之插件,一、插件
Solon Plugin 是框架的核心接口,简称"插件".其本质是一个"生命周期"接口.它可让一个组件类参与程序的生命周期过程(这块看下:<应用启动过程与 ...
- NLog.config 配置
NLog.confg 参考配置, NLog 热生效不需要重启服务 <?xml version="1.0" encoding="utf-8" ?> & ...
- python+requests+unittest+htmltestrunner+Excel生成接口自动化的测试框架
Python+Requests+Unittest+Excel+HtmltestRunner生成自动化测试框架 流程 1.接口文档 2.读取接口文档 3.封装request的类 4.unittest类 ...
- 【每日一题】21.边的染色 (DFS连通图 + 思维)
补题链接:Here 思维不够,看到这种陌生的题目无从下手. 这题应该做过一次的人会觉得它其实并不难. 主要思想:把边权->点权. 这样做的好处是,无论你怎么分配点权,在环内的异或值一定为 \(0 ...
- 5、SpringBoot连接数据库引入mybatis
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- P1077-DP【黄】
昨天好几道题没做出来很郁闷,结果今天上来半小时不到就直接做出一道黄DP题了,不错,又有写题的冲动了. 这道题我一直被那个"因为方案数可能很多,请输出方案数对 1000007取模的结果.&qu ...
- freeswitch带媒体压力测试方案
概述 原本的计划是使用sipp完成带媒体压力测试,但是实际测试过程中发现sipp的媒体处理功能有问题(也有可能是我使用的姿势不对). sipp在带媒体的情况下(600路并发开始),出现大量的不响应和响 ...