判断GC运行模式的几种方法

上次提出了一个问题:

一个托管进程,如果运行在一个双核CPU的机器上,GC是运行于Server GC模式,在假设CPU没有Hyper thread功能的话,这个托管进程会有几个GC Thread?可以用调试工具来证明你的判断吗?

 

这个问题的答案,想必很多人也知道,几个cpu就几个GC Thread。不过接下来的内容,主要侧重于,变换几种不同的方式来解决这个问题:

 

方法一:

WinDBG中,加载SOS模块:

0:003> !eeversion

2.0.50727.832 retail

Workstation mode

SOS Version: 2.0.50727.832 retail build

这里的Workstation mode表示的就是本机运行的是Workstation模式的垃圾回收方式。

 

方法二:

首先列出某个托管线程当前加载的modules

0:003> lm

start    end        module name

00400000 00408000   TestConcoleApp   (deferred)            

00ec0000 00f 06000   mscorlib_resources   (deferred)            

…………………..        

79000000 79045000   mscoree    (deferred)            

79060000 790b3000   mscorjit   (deferred)            

790c 0000 79b90000   mscorlib_ni   (deferred)            

79e70000 7a 3d6000   mscorwks   (export symbols)

      C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorwks.dll

7c 800000 7c 91d000   KERNEL32   (export symbols)

      C:/WINDOWS/system32/KERNEL32.dll

7c 920000 7c 9b4000   ntdll      (export symbols)

      C:/WINDOWS/system32/ntdll.dll

7d590000 7dd83000   shell32    (deferred)            

 

Unloaded modules:

60340000 60348000   culture.dll

 

接着列出mscorwks模块的详情:

0:003> lm v m mscorwks

start    end        module name

79e70000 7a 3d6000   mscorwks   (export symbols)

      C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorwks.dll

Loaded symbol image

file: C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorwks.dll

    Image path: C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorwks.dll

    Image name: mscorwks.dll

    Timestamp:        Fri Apr 13 15:15:54 2007 ( 461F 2E 2A )

    CheckSum:         00565A 86

    ImageSize:        00566000

    File version:     2.0.50727.832

    Product version:  2.0.50727.832

    File flags:       0 (Mask 3F )

    File OS:          4 Unknown Win32

    File type:        2.0 Dll

    File date:        00000000.00000000

    Translations:     0409.04b0

    CompanyName:      Microsoft Corporation

    ProductName:      Microsoft® .NET Framework

    InternalName:     mscorwks.dll

    OriginalFilename: mscorwks.dll

    ProductVersion:   2.0.50727.832

    FileVersion:      2.0.50727.832 (QFE.050727-8300)

    FileDescription:  Microsoft .NET Runtime Common Language Runtime - WorkStation

    LegalCopyright:   © Microsoft Corporation.  All rights reserved.

    Comments:         Flavor=Retail

       Lm这个命令列出该线程加载的modules。用v参数来现实详情,m参数指定特定的modules。同样可以得到GC是运行在WorkStation模式下。

      

       方法三:

       打开DotNet Framework配置工具,在“My Computer”上面点击右键,同样可以得到显示的是WorkStation模式。

      


 


      
方法四:

       可以在调试一个托管,或者是native线程,使用~k命令显示堆栈的调用情况。如果看到类似mscorwks!SVR::gc_heap::这样的方法,SVR就表示的是使用的Server模式。如果是看到类似mscorwks!WKS这样的字样,就表示的是使用的WorkStation模式。这也说明了在Framework2.0里面,这两种模式的实现,是在一个modules里面实现的。不过我翻遍了一个叫做IpSwiter的东西,也没用看到这样的字样…sad..
 

       well,that's all i know,and you can share your ways with me ^_^

Java虚拟机(JVM)调优主要有以下几种方法: 1. 堆内存调优:JVM的堆内存是用来存储对象的地方,可以通过调整堆内存的大小来提升性能。一般来说,应该根据应用程序的需求和服务器的硬件配置来合理地分配堆内存大小。如果堆内存太小,可能会导致频繁的垃圾回收,降低性能;如果堆内存太大,可能会导致内存浪费。 2. GC调优:GC(垃圾回收)是JVM管理内存的机制。通过调整GC算法和参数,可以优化内存的回收和释放。常见的GC算法有串行GC、并行GC、CMS GC、G1 GC等,可以根据应用程序的特点选择合适的GC算法,以获得更好的性能。另外,还可以通过设置GC参数(如-Xms、-Xmx、-XX:NewRatio等)来优化GC过程。 3. 线程调优:JVM中的线程是执行程序的基本单位。通过合理管理和调优线程,可以提高程序的并发性能。例如,可以通过合理地使用线程池、减少线程的创建和销毁、降低线程的阻塞时间等来提升性能。 4. 内存分析工具调优:使用内存分析工具(如VisualVM、Eclipse Memory Analyzer等),可以监测应用程序的内存使用情况,并识别内存泄漏和性能瓶颈。通过分析工具提供的信息,可以定位问题并采取相应的优化措施。 综上所述,JVM调优主要包括堆内存调优、GC调优、线程调优和使用内存分析工具进行优化。根据具体的应用场景和问题,可以结合这些方法来提高Java应用程序的性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值