假如这个世界上只剩下你一个人,当你正坐在屋子里的时候,这时突然响起了敲门声...

用Java获得当前性能信息

上一篇 / 下一篇  2008-05-01 17:16:17

查看( 87 ) / 评论( 10 )
在Java中,可以获得总的物理内存、剩余的物理内存、已使用的物理内存等信息,本例讲解如何取得这些信息,并且获得在Windows下的内存使用率。ITPUB个人空间.@)a+i\'U$j u%w*V,j
     首先编写一个MonitorInfoBean类,用来装载监控的一些信息,包括物理内存、剩余的物理内存、已使用的物理内存、内存使用率等字段,该类的代码如下:
~|4um F(a0 package com.amigo.performance;ITPUB个人空间p&|}XZh2G,Y

)t)G(A e;~,R^%G$h0 /** *//**ITPUB个人空间6u#s(x3sl1D/VMxC
* 监视信息的JavaBean类.ITPUB个人空间Yq9oM*N} A
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
\N1A9`/J_0 * @version 1.0 ITPUB个人空间yLx5I#P3M9[#?
* Creation date: 2008-4-25 - 上午10:37:00
-X;JB8Q-p7S S0 */
-}*NIY.~;Js0 public class MonitorInfoBean {
0V`e6X!qf:x&o0     /** *//** 可使用内存. */ITPUB个人空间3J*@1V/dCA0f6O.A t k"f%Z
    private long totalMemory;
@)@@-[^kF0    
eQ*@(Mm0     /** *//** 剩余内存. */
{o)H:u-@j r0     private long freeMemory;ITPUB个人空间$HLFSh)e,n;I
   
'y0ZY3q&K&t:Q0     /** *//** 最大可使用内存. */
L(oX@Z9W8N0     private long maxMemory;ITPUB个人空间!fO^cu H)G1x
    ITPUB个人空间4x2T$EcaS
    /** *//** 操作系统. */
qk md(Q8D0     private String osName;ITPUB个人空间LmJCjE k,g4\
    ITPUB个人空间o*PK#n^C7z5T#o
    /** *//** 总的物理内存. */ITPUB个人空间!Ps7R,VC$X
    private long totalMemorySize;ITPUB个人空间!q3[:g)g;U d7`Q
    ITPUB个人空间fLL,l1p9O$w
    /** *//** 剩余的物理内存. */
ND6~@.L'T$t;\0e0     private long freePhysicalMemorySize;
!R%E!r1b;ReX1E@ ^F0     ITPUB个人空间6g*~nH)KR3}:S{'y
    /** *//** 已使用的物理内存. */
{)fQx}9{ XK0     private long usedMemory;
SU$hE$`"K0    
6Q*~q1f(D5a1{0     /** *//** 线程总数. */ITPUB个人空间9bf BkHg
    private int totalThread;
[!mew#so7@0     ITPUB个人空间9?kq6U[ee f
    /** *//** cpu使用率. */ITPUB个人空间Y'[P` i.P
    private double cpuRatio;
|^a)[8t+cZ0 ITPUB个人空间U%W*p*\ R~+Hu$W
    public long getFreeMemory() {
Ym5|g%qG0         return freeMemory;ITPUB个人空间@i.?sm~
    }
YkttE|*~0 ITPUB个人空间,UxJ2KKM
    public void setFreeMemory(long freeMemory) {ITPUB个人空间!f@Ruq Gnq
        this.freeMemory = freeMemory;
v oU0U%pQ0fZ"a0     }
Pp@3HTca0A0 ITPUB个人空间+I1~+_l,T] L
    public long getFreePhysicalMemorySize() {
9{U8l\*zK/a0         return freePhysicalMemorySize;
UG ^K/Q!\\I0     }ITPUB个人空间IVAda8rn\.O
ITPUB个人空间u?#\)K3q4k`O8z
    public void setFreePhysicalMemorySize(long freePhysicalMemorySize) {ITPUB个人空间%e4~ gY~ W3L b
        this.freePhysicalMemorySize = freePhysicalMemorySize;
2y |R7?p(]'i|W0     }ITPUB个人空间z+r&^?*^
ITPUB个人空间;|r` No
    public long getMaxMemory() {ITPUB个人空间3L b)CQ/ir1B,z!j \
        return maxMemory;
4D:V;Nlc0     }
*v7I1xQI"~#\wo0
{&@2`Qg%B,I P#T0     public void setMaxMemory(long maxMemory) {
X0e1om6WeL0         this.maxMemory = maxMemory;ITPUB个人空间 o"z$iqWgr a0gm
    }
[#{`2W P2E7I0 ITPUB个人空间3],i1P,hK1?A
    public String getOsName() {ITPUB个人空间"mB;@h~5BYh
        return osName;
v!M | n6q-P-j:t`d0     }ITPUB个人空间wnfCx@p G
ITPUB个人空间 O)H-kP1E(e
    public void setOsName(String osName) {
vZ |2e!u7~JIh0l'K0         this.osName = osName;ITPUB个人空间f,A0qZu ]
    }
pv1o+tD"H9P0
t6s7YK+G:rf;b0     public long getTotalMemory() {
O+wVl(?R_0         return totalMemory;
a4[Cwbi0     }ITPUB个人空间'\W)b/@2cF2ZA

Ia7c9zi0     public void setTotalMemory(long totalMemory) {ITPUB个人空间wg B gKW3Zw
        this.totalMemory = totalMemory;
8Od []'Yvq,T mv0     }ITPUB个人空间0I}qC0O
ITPUB个人空间&]Uj,j6n*W$D}U4B
    public long getTotalMemorySize() {
u`_`$\V*bO,k0         return totalMemorySize;ITPUB个人空间PA5a?zt%i.^;} c
    }
Y Ai m(Lu0 ITPUB个人空间@X tE;ml
    public void setTotalMemorySize(long totalMemorySize) {ITPUB个人空间4LG$W^+[ @H P
        this.totalMemorySize = totalMemorySize;ITPUB个人空间nBMi,mS)AC
    }ITPUB个人空间 }#cGX m'R
ITPUB个人空间g4fz Gy:x
    public int getTotalThread() {ITPUB个人空间 _$ApBCLCUZ
        return totalThread;ITPUB个人空间8A5{K&|)f3k/A
    }ITPUB个人空间Sr_)Tu`Pp
ITPUB个人空间/A*w`\zg-Y)l
    public void setTotalThread(int totalThread) {ITPUB个人空间~"m3Lq8DO
        this.totalThread = totalThread;ITPUB个人空间;nZs rq8T
    }ITPUB个人空间 T2k,j;C5Dl,w r^ x

0}v ~ r~)`0     public long getUsedMemory() {
M4q6`:QD4X)Sm0         return usedMemory;
4hG:uPa0     }ITPUB个人空间 T:]Td7\/y1wP

6IvM.B-|0     public void setUsedMemory(long usedMemory) {ITPUB个人空间 as_}w,X
        this.usedMemory = usedMemory;
\]d!e g9| c0     }
0C4nG9I$CK*A0
D};d+C5jW4wB0     public double getCpuRatio() {
|rE _y#n0         return cpuRatio;ITPUB个人空间H Cu"ai8l X
    }ITPUB个人空间7EpYi(s L'R5K

VW ?Z s[0     public void setCpuRatio(double cpuRatio) {ITPUB个人空间gW `j"v(i-\
        this.cpuRatio = cpuRatio;ITPUB个人空间;GW(U;S]k^3^J'E|8y
    }
K OW.{5nKu8xT0 }ITPUB个人空间 p e*_L]"ftE2p|%h
     接着编写一个获得当前的监控信息的接口,该类的代码如下所示:ITPUB个人空间T`rI%[W7H.?"L
package com.amigo.performance;ITPUB个人空间(?2u4J.o;G*\@w}

v:m nyV0 /** *//**
"z g2ccu wz0 * 获取系统信息的业务逻辑类接口.ITPUB个人空间9R _^;j @"}3~?3ydG
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
WX }(aq#T mo%B0 * @version 1.0
1o*ozY-ZHW/lc#m%LAo0 * Creation date: 2008-3-11 - 上午10:06:06ITPUB个人空间.}k,R1@Iu a)Wj
*/
(Y8]&[Wwf1`v0 public interface IMonitorService {
%z![7ToJm}-?0     /** *//**
!p)_Togf'i0      * 获得当前的监控对象.ITPUB个人空间cF u)Nbqt&MOM
     * @return 返回构造好的监控对象
`EA RsY(J"G0      * @throws Exception
3s'jx+S4E `b/f+S8s0      * @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>ITPUB个人空间V:} v%iF }K M
     * Creation date: 2008-4-25 - 上午10:45:08ITPUB个人空间Z K'd2N ]6f@
     */
"GT*r%o'B|0     public MonitorInfoBean getMonitorInfoBean() throws Exception;
v%@ ` r;v@X F0
q2y&R2a I J n cQ0 }
;C z4e!no\B} ?(O0      该类的实现类MonitorServiceImpl如下所示:ITPUB个人空间9he2SA-m{]5| i
package com.amigo.performance;ITPUB个人空间-XjzO;`k\

*L7`-Qy%z[k"S0 import java.io.InputStreamReader;
[ aJ!W"{J%K%G0 import java.io.LineNumberReader;
%}vfq q%p0F)[H0 ITPUB个人空间h3}tJ%\a:E~Hvj-e k
import sun.management.ManagementFactory;ITPUB个人空间*qFhZ~J

2y8d\}yY9N Jq0 import com.sun.management.OperatingSystemMXBean;ITPUB个人空间3D2Q$At-_%Lsa/n+H

:[*O] h8aN&k0 /** *//**
!kREy8il/b-z0 * 获取系统信息的业务逻辑实现类.ITPUB个人空间CJ}M o
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
7}6L-s H+V"m0 * @version 1.0 Creation date: 2008-3-11 - 上午10:06:06
3te3Y%C;r}6V#C7?8A R0 */
$]/VljPp:?$D0 public class MonitorServiceImpl implements IMonitorService {ITPUB个人空间7VMzeu*R7V'SO
    ITPUB个人空间Gzn:f h
    private static final int CPUTIME = 30;
h+O-Ogyc^'k0
z)w;Y }^[M0     private static final int PERCENT = 100;ITPUB个人空间%Ib&TNGn1n:h

f9y sH.J0N ^(q o i-Ze6|0     private static final int FAULTLENGTH = 10;
*|$~ |+FI j0 ITPUB个人空间#^Z Pc'ptRmh
    /** *//**ITPUB个人空间dd9T+? Q7|/r,Q
     * 获得当前的监控对象.ITPUB个人空间 ~oEp/s4g(v L*}*vj5]
     * @return 返回构造好的监控对象ITPUB个人空间kF,G9j'Z
     * @throws ExceptionITPUB个人空间:M;S8fBI&c m?
     * @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
+qM Z$[7x0      * Creation date: 2008-4-25 - 上午10:45:08ITPUB个人空间%B5r8WK2~o2^
     */ITPUB个人空间7q;tf2J!`x%x6u:i
    public MonitorInfoBean getMonitorInfoBean() throws Exception {
DZ(QQ$b0         int kb = 1024;
3q {;I#Pe@0         ITPUB个人空间*~UrPX7CqF'u^
        // 可使用内存ITPUB个人空间8V.ww.C.~+FZ
        long totalMemory = Runtime.getRuntime().totalMemory() / kb;ITPUB个人空间GW {3ta1\ j5[k
        // 剩余内存
-U,]8@ |G6q2iv0         long freeMemory = Runtime.getRuntime().freeMemory() / kb;ITPUB个人空间"h^!o Q @ G
        // 最大可使用内存ITPUB个人空间/IX;NRAu1x:Y
        long maxMemory = Runtime.getRuntime().maxMemory() / kb;ITPUB个人空间E6K:vXZ M

3gM!x#iv+q0Ur0         OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory
{bv*F,xl j0                 .getOperatingSystemMXBean();ITPUB个人空间 R1sNS_mH
ITPUB个人空间%S*o4[t W
        // 操作系统
LFsJ9P aK0         String osName = System.getProperty("os.name");
@"w|J*WW0         // 总的物理内存ITPUB个人空间2y"w BV*Q/W i
        long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb;
u;y*Fu u B0         // 剩余的物理内存ITPUB个人空间Gh Y$Rk9B Z
        long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb;
E } v-`/a0cd0         // 已使用的物理内存ITPUB个人空间fC?uy
        long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb
`C U [$Qw0                 .getFreePhysicalMemorySize())
8M2j0wkkDD0                 / kb;ITPUB个人空间o*O0tB`(mW

2KE1}fCE8L:Tu8[[0         // 获得线程总数
P#_VK,sv0         ThreadGroup parentThread;ITPUB个人空间_0\,n@&_m?b a
        for (parentThread = Thread.currentThread().getThreadGroup(); parentThreadITPUB个人空间:|:D1S;y"bY*~8F
                .getParent() != null; parentThread = parentThread.getParent())ITPUB个人空间"Q({1p(i6z6u
            ;ITPUB个人空间%R&_'C3q7y|zst#`{
        int totalThread = parentThread.activeCount();ITPUB个人空间D9b7kT7GG-Kv/B!`

IX8\r6Z*|3C`?t$~6Q0         double cpuRatio = 0;ITPUB个人空间/E9c VaF1F
        if (osName.toLowerCase().startsWith("windows")) {
'B4i:Y/pV;BwU0[0             cpuRatio = this.getCpuRatioForWindows();
9mG]J?C"XY2N_jZ0         }ITPUB个人空间-M3Mf q2m'CC%c
        ITPUB个人空间p`*d7y w
        // 构造返回对象ITPUB个人空间(HK[ Z`I3W@,g+T
        MonitorInfoBean infoBean = new MonitorInfoBean();ITPUB个人空间1~]YN4Eb1y
        infoBean.setFreeMemory(freeMemory);
u c9wD}D%rc7|0         infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);
E ?+_#kR:V J0         infoBean.setMaxMemory(maxMemory);ITPUB个人空间 T"LhZ#_1jS7G
        infoBean.setOsName(osName);
0u3b%Q\6`?0         infoBean.setTotalMemory(totalMemory);ITPUB个人空间 }n_%EHv8aQI
        infoBean.setTotalMemorySize(totalMemorySize);ITPUB个人空间*jE%I6Q[!WS
        infoBean.setTotalThread(totalThread);
8~ _1jq,C/@0         infoBean.setUsedMemory(usedMemory);
2vJRH4gUr Z"qa;P0         infoBean.setCpuRatio(cpuRatio);
kY&G])fz:T;D!o0         return infoBean;
BZ9_fa|'m:`8Pc0     }
gq6b$f-ypm z0
)NRL'v[H$kC0     /** *//**ITPUB个人空间n!YX1[ G5y&q#B
     * 获得CPU使用率.
@%Z ]p?0tP0      * @return 返回cpu使用率
?6fw3cgM&OC;~0      * @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>ITPUB个人空间,h&hG:My9w
     * Creation date: 2008-4-25 - 下午06:05:11
#W r[#f,H5^O0      */
~ }$i/p^U$l0     private double getCpuRatioForWindows() {ITPUB个人空间1zjC ~;W3I.G
        try {ITPUB个人空间p^fu3d@D
            String procCmd = System.getenv("windir")ITPUB个人空间NYIt\;Z
                    + "\system32\wbem\wmic.exe process get Caption,CommandLine,"ITPUB个人空间 \5D jrG5~1Cq ?
                    + "KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";
&N)[4J k7h,g.y0             // 取进程信息ITPUB个人空间3\Tts,o [ Cd
            long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd));ITPUB个人空间 pM {;R|!e0Ot!cd
            Thread.sleep(CPUTIME);ITPUB个人空间E&s_(lUm
            long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd));
1|;zW|)Ff1f zx5q0             if (c0 != null && c1 != null) {ITPUB个人空间}5E5X*S!L H
                long idletime = c1[0] - c0[0];ITPUB个人空间w!X~5O5Hk7[
                long busytime = c1[1] - c0[1];ITPUB个人空间*]SnVc:F
                return Double.valueOf(
(d,WE'Xf6M"a0                         PERCENT * (busytime) / (busytime + idletime))ITPUB个人空间K9~w4LM'iE)| X,N
                        .doubleValue();
(C6X^/P&y.\0             } else {
dQj[ Z0                 return 0.0;ITPUB个人空间9^ d;[*FY
            }ITPUB个人空间kX/Z3g.N5M
        } catch (Exception ex) {ITPUB个人空间:M^9YO0R]m
            ex.printStackTrace();ITPUB个人空间7@ {#KN(|DM7p2i-F
            return 0.0;ITPUB个人空间0}2p8n;f{,yPo
        }ITPUB个人空间\,m1r1T ~O T
    }
1H3ao3Yy/C)a0 ITPUB个人空间B]vmH X
    /** *//**ITPUB个人空间 f?9H0P#qq$RAu
     * 读取CPU信息.
$X r)p ps#Y,vm9}0      * @param procITPUB个人空间v+^+`7v4K_#z0E#J
     * @returnITPUB个人空间!tmF1l]I+U2l
     * @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
~9w u)} G0      * Creation date: 2008-4-25 - 下午06:10:14ITPUB个人空间Ec"v*RYV/bm&\&X
     */ITPUB个人空间ErT#wl^j
    private long[] readCpu(final Process proc) {ITPUB个人空间Qpi [Rw
        long[] retn = new long[2];ITPUB个人空间)Em R3c~$[&i
        try {ITPUB个人空间{B9| B PC
            proc.getOutputStream().close();ITPUB个人空间^z2tZEBQ`@
            InputStreamReader ir = new InputStreamReader(proc.getInputStream());
c8C `8Wy5tx0             LineNumberReader input = new LineNumberReader(ir);ITPUB个人空间b(s0^+@8qkPV1P/A]f
            String line = input.readLine();ITPUB个人空间4Kk|JtDX
            if (line == null || line.length() < FAULTLENGTH) {
dZ D(F^;v0                 return null;ITPUB个人空间(VY Tg_h1N
            }
{qj#]GV*U-O } G&y0             int capidx = line.indexOf("Caption");ITPUB个人空间Yd G#TS5ekOx
            int cmdidx = line.indexOf("CommandLine");ITPUB个人空间5z)Qss] d,iK
            int rocidx = line.indexOf("ReadOperationCount");
B"s/]`)^-_0             int umtidx = line.indexOf("UserModeTime");
8[3?1W'rqm0             int kmtidx = line.indexOf("KernelModeTime");
8dDvZl;SOM$gN:]0             int wocidx = line.indexOf("WriteOperationCount");ITPUB个人空间r-o(zT9i/]
            long idletime = 0;ITPUB个人空间{"R2`._a
            long kneltime = 0;
(b!vWDH2~C1frV0             long usertime = 0;
oz^Nn;}uX/~]3r0             while ((line = input.readLine()) != null) {
^`4^ra DC7U0                 if (line.length() < wocidx) {
bJHNa-n4W8`2n0                     continue;
%OK"_']7|2s0                 }
c5|1B`'A]0                 // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount,
D,TIo#Sk0                 // ThreadCount,UserModeTime,WriteOperation
"g,ZV.fPbm"@(s0                 String caption = Bytes.substring(line, capidx, cmdidx - 1)
u1_ Gn&|2f0                         .trim();ITPUB个人空间!n&Z:b m+CW8Oc8QEt
                String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim();ITPUB个人空间0{'x^2dhs~!C
                if (cmd.indexOf("wmic.exe") >= 0) {ITPUB个人空间g wnWo D!O$?B*Q-D
                    continue;ITPUB个人空间*t|xw.H+^ sgf!E
                }ITPUB个人空间 mxA#YL8a,c
                // log.info("line="+line);ITPUB个人空间P+El,J%d:c"G
                if (caption.equals("System Idle Process")
hTPX Q1x+F0                         || caption.equals("System")) {
zS5W!Xth0                     idletime += Long.valueOf(ITPUB个人空间MA+p+Rd'C
                            Bytes.substring(line, kmtidx, rocidx - 1).trim())
H*H@;i:f G{}0                             .longValue();ITPUB个人空间'xoB3^O"v&PFmxy8~
                    idletime += Long.valueOf(ITPUB个人空间+Gqd{,O c5i-_H'sL t
                            Bytes.substring(line, umtidx, wocidx - 1).trim())ITPUB个人空间c6x0fl D!^
                            .longValue();
:w*z5a5S3~+Y E S0                     continue;
5U.?7lrAY:o0                 }ITPUB个人空间0iJ8Z(O8Q5M3w
ITPUB个人空间t6q9kDq.d
                kneltime += Long.valueOf(ITPUB个人空间+}pPGvd
                        Bytes.substring(line, kmtidx, rocidx - 1).trim())
8tUy)[`;B~9H S0                         .longValue();
v-AX2Sm[+TR0                 usertime += Long.valueOf(ITPUB个人空间yeU#Rh0}6xz
                        Bytes.substring(line, umtidx, wocidx - 1).trim())
%YuBuT~Xu {||0                         .longValue();
1{ Q I1Q/c0             }
R1f2Ez2Z@Qh\h{0             retn[0] = idletime;ITPUB个人空间 E Z4hq$M6NS6A]R,w
            retn[1] = kneltime + usertime;ITPUB个人空间 O)GtN%VBs_!D
            return retn;
-i kz"Vt8d0         } catch (Exception ex) {ITPUB个人空间a1@2~^r
            ex.printStackTrace();ITPUB个人空间n{,_&o-Fy a\
        } finally {
L1M|na#D0             try {
/I\Wo^:{sp G$j0                 proc.getInputStream().close();ITPUB个人空间 v D|O'l.tR
            } catch (Exception e) {
4\ lB)XTd&]/Ob0                 e.printStackTrace();ITPUB个人空间j wI3R.^
            }ITPUB个人空间VL/J'~H @
        }ITPUB个人空间_:BV a,n6C
        return null;ITPUB个人空间9H3J#O8c)KwHW^G
    }ITPUB个人空间tq&ze:?'E ] F
    ITPUB个人空间v9_}%q#l+T(by`*G&c
    /** *//**
D3T!DX7a%zL*v0rX0      * 测试方法.
~#p3g P)mFy8lNr0      * @param args
:\ v)Xf4^ C0      * @throws ExceptionITPUB个人空间+r!m T&n?/tK V
     * @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>ITPUB个人空间_w"h;_%j ?#yI
     * Creation date: 2008-4-30 - 下午04:47:29
;tdbt8CW2uD0      */ITPUB个人空间 BAk;ug
    public static void main(String[] args) throws Exception {ITPUB个人空间&zM/oz^Ev~V
        IMonitorService service = new MonitorServiceImpl();
Kn$D7?-s lEgfYg0         MonitorInfoBean monitorInfo = service.getMonitorInfoBean();
*^I$WWL E0         System.out.println("cpu占有率=" + monitorInfo.getCpuRatio());ITPUB个人空间I1H8P.g;v C
        
(D F$R$v(l.XfT R0         System.out.println("可使用内存=" + monitorInfo.getTotalMemory());
q R y2x C1L$t~0         System.out.println("剩余内存=" + monitorInfo.getFreeMemory());ITPUB个人空间-KpY'O#ZE4x-K/{{
        System.out.println("最大可使用内存=" + monitorInfo.getMaxMemory());ITPUB个人空间-BetH3SG
        
5~I3cdTG8[:z9M(a~0         System.out.println("操作系统=" + monitorInfo.getOsName());ITPUB个人空间3GQ5N%G @6@q%q9z,G
        System.out.println("总的物理内存=" + monitorInfo.getTotalMemorySize() + "kb");ITPUB个人空间9fQiv[!i;@
        System.out.println("剩余的物理内存=" + monitorInfo.getFreeMemory() + "kb");
}6xL[yEB0         System.out.println("已使用的物理内存=" + monitorInfo.getUsedMemory() + "kb");ITPUB个人空间DA"B.W}.`2r
        System.out.println("线程总数=" + monitorInfo.getTotalThread() + "kb");
C)M_*k(MS H&Z8b0     }ITPUB个人空间"l/x!l{P |$c?
}ITPUB个人空间l+elVR[H
        该实现类中需要用到一个自己编写byte的工具类,该类的代码如下所示:
U/|Y!a a0 package com.amigo.performance;
\+|0|$ZJS0
'JV!A'e#lV C_$QE!F ?0 /** *//**
%LC#D;|?RQ\0 * byte操作类.ITPUB个人空间;F6Z7\(A"V#Q'Kd
* @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>ITPUB个人空间 _KRy([!s \)A
* @version 1.0 ITPUB个人空间:H7[ bD0y6fo@E @
* Creation date: 2008-4-30 - 下午04:57:23
0[F2Q0[@0 */ITPUB个人空间%G6t2p7Jl T
public class Bytes {
ij xo%{-hA0     /** *//**ITPUB个人空间 k{2O/|j6i6@
     * 由于String.subString对汉字处理存在问题(把一个汉字视为一个字节),因此在
SKWhJCU0      * 包含汉字的字符串时存在隐患,现调整如下:ITPUB个人空间p2bS|AE ]ab
     * @param src 要截取的字符串
4h4j1^T"pw:CX7OKz0      * @param start_idx 开始坐标(包括该坐标)ITPUB个人空间6IQzNG(qaO
     * @param end_idx   截止坐标(包括该坐标)ITPUB个人空间.j]4V9yA w,h i#NC|
     * @return
ST}-c9L;c.L)cIO!O0      */ITPUB个人空间Q @j^6U;I4K
    public static String substring(String src, int start_idx, int end_idx){
@9[%K pQ0         byte[] b = src.getBytes();
3W1o.jLp7z nJ$\0         String tgt = "";ITPUB个人空间M(n*~0|#W8AS
        for(int i=start_idx; i<=end_idx; i++){ITPUB个人空间9C G5[LdA~U
            tgt +=(char)b;
{}$X3kt&iP0         }
_zg;O+?$g7sU%g-l.A0         return tgt;
A0E#B$[w"M8Z0     }ITPUB个人空间I)H+f'hvqG
}ITPUB个人空间mh v%~d7o8a0U"p
        运行下MonitorBeanImpl类,读者将会看到当前的内存、cpu利用率等信息。

TAG:

justforregister的个人空间 justforregister 发布于2008-05-01 20:18:11
nice job
greenflute发布于2008-05-01 23:43:21

svsechen的个人空间 svsechen 发布于2008-05-04 00:54:29
还行
有点多.
tosz的个人空间 tosz 发布于2008-05-04 23:22:49
这段代码值得收藏
seraphin的个人空间 seraphin 发布于2008-05-05 14:46:54
不错。好东西。很实用
54powerman发布于2008-05-06 12:54:30
不错,mark,想找linux的
kekelele kekelelelele 发布于2008-05-06 17:24:34
拷下来试试看
sinkeler发布于2008-05-06 21:50:58
这样的文章可以做一个合集了,真的。
Kevin_03发布于2008-05-07 10:35:34
很实用,mark
softwin发布于2008-05-07 11:29:49
mark,收藏了,谢谢
我来说两句

(可选)

日历

« 2008-07-25  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 8167
  • 日志数: 101
  • 建立时间: 2008-02-08
  • 更新时间: 2008-07-21

RSS订阅

Open Toolbar