From cc1859ba1a35219bf097319a81bb642d8f57daab Mon Sep 17 00:00:00 2001 From: "calvin.xiao" Date: Fri, 17 Aug 2018 10:50:01 +0800 Subject: [PATCH] =?UTF-8?q?#98=20vjtop=E7=BB=A7=E7=BB=AD=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E6=80=A7=E8=83=BD=E9=99=8D=E4=BD=8E=E6=B6=88=E8=80=97=EF=BC=8C?= =?UTF-8?q?=20=E6=AD=A3=E7=A1=AE=E8=AE=BE=E7=BD=AEMap=E7=9A=84=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/vip/vjtools/vjtop/VMDetailView.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/vjtop/src/main/java/com/vip/vjtools/vjtop/VMDetailView.java b/vjtop/src/main/java/com/vip/vjtools/vjtop/VMDetailView.java index 3127e073..ce4ba98a 100755 --- a/vjtop/src/main/java/com/vip/vjtools/vjtop/VMDetailView.java +++ b/vjtop/src/main/java/com/vip/vjtools/vjtop/VMDetailView.java @@ -169,14 +169,15 @@ private void printTopCpuThreads(DetailMode mode) throws IOException { return; } - Map threadCpuTotalTimes = new HashMap(); - Map threadCpuDeltaTimes = new HashMap(); - Map threadSysCpuTotalTimes = new HashMap(); - Map threadSysCpuDeltaTimes = new HashMap(); long threadsHaveValue = 0; long tids[] = vmInfo.getThreadMXBean().getAllThreadIds(); + int mapSize = tids * 1.5; + Map threadCpuTotalTimes = new HashMap(mapSize); + Map threadCpuDeltaTimes = new HashMap(mapSize); + Map threadSysCpuTotalTimes = new HashMap(mapSize); + Map threadSysCpuDeltaTimes = new HashMap(mapSize); // 批量获取CPU times,性能大幅提高。 // 两次获取之间有间隔,在低流量下可能造成负数 @@ -305,7 +306,6 @@ private void printTopCpuThreads(DetailMode mode) throws IOException { lastThreadSysCpuTotalTimes = threadSysCpuTotalTimes; } - private void printTopMemoryThreads(DetailMode mode) throws IOException { if (!vmInfo.threadMemoryAllocatedSupported) { @@ -315,9 +315,9 @@ private void printTopMemoryThreads(DetailMode mode) throws IOException { } long tids[] = vmInfo.getThreadMXBean().getAllThreadIds(); - - Map threadMemoryTotalBytesMap = new HashMap(); - Map threadMemoryDeltaBytesMap = new HashMap(); + int mapSize = tids.length * 1.5; + Map threadMemoryTotalBytesMap = new HashMap(mapSize); + Map threadMemoryDeltaBytesMap = new HashMap(mapSize); long totalDeltaBytes = 0; long totalBytes = 0; @@ -386,9 +386,9 @@ private void printTopMemoryThreads(DetailMode mode) throws IOException { long allocationRate = threadDelta == null ? 0 : (threadDelta * 1000) / vmInfo.upTimeMills.delta; System.out.printf(dataFormat, tid, threadName, Utils.leftStr(info.getThreadState().toString(), 10), Utils.toFixLengthSizeUnit(allocationRate), - getThreadMemoryUtilization(threadMemoryDeltaBytesMap.get(tid), totalDeltaBytes), + getMemoryUtilization(threadMemoryDeltaBytesMap.get(tid), totalDeltaBytes), Utils.toFixLengthSizeUnit(threadMemoryTotalBytesMap.get(tid)), - getThreadMemoryUtilization(threadMemoryTotalBytesMap.get(tid), totalBytes)); + getMemoryUtilization(threadMemoryTotalBytesMap.get(tid), totalBytes)); } // 打印线程汇总信息,这里因为最后单位是精确到秒,所以bytes除以毫秒以后要乘以1000才是按秒统计 @@ -482,7 +482,7 @@ public void cleanupThreadsHistory() { this.lastThreadMemoryTotalBytes.clear(); } - private static double getThreadMemoryUtilization(Long threadBytes, long totalBytes) { + private static double getMemoryUtilization(Long threadBytes, long totalBytes) { if (threadBytes == null || totalBytes == 0) { return 0; }