首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Eclipse OpenJ9 中的类共享(8)一个示例

Eclipse OpenJ9 中的类共享(8)一个示例

一个示例为了实际演示类共享的好处,本节将提供一个简单的图形演示。相关源代码和二进制程序可以在GitHub 上找到。
这个演示应用程序将在 Java 8 上运行,查找 jre\lib 目录并打开每个 JAR,在它找到的每个类上调用                                        Class.forName()。这会导致将大约 16,000 个类加载到 JVM                                中。该演示会报告 JVM                                花了多长时间来加载这些类。这是一个有点不自然的示例,但它确实展示了类共享的好处。让我们来运行这个应用程序并看看结果。
类加载的性能
  • 从   项目下载或从  获取带 OpenJ9 的 JDK。
  • 使用清单 11                                                  中的命令,在不启用类共享的情况下多次运行该测试,以便对系统磁盘缓存进行“预热”:清单 11. 对磁盘缓存进行预热
    1
    C:\OpenJ9>wa6480_openj9\j2sdk-image\bin\java -Xshareclasses:none -cp shcdemo.jar ClassLoadStress




    当出现图                                                1 中的窗口时,请按下按钮。该应用程序将加载这些类。
    图 1. 按下按钮加载类之后,应用程序会报告它加载了多少个类和所用的时间,如图 2 所示:
    图 2. 结果出来了!您会注意到,应用程序每次运行时都可能会更快一点;这得益于操作系统优化。
  • 现在,在启用类共享的情况下运行该演示,如清单 12 所示。这会创建一个新的共享缓存。您可以指定大约 50MB                                        的缓存大小,以确保拥有存储所有类的足够空间。清单 12 给出了命令行和一些样本输出。                                                  清单 12. 在启用类共享的情况下运行演示
    1
    2
    3
    4
    5
    6
    7
    8
    C:\OpenJ9>wa6480_openj9\j2sdk-image\bin\java -cp shcdemo.jar -Xshareclasses:name=demo,verbose -Xscmx50m ClassLoadStress
    [-Xshareclasses persistent cache enabled]
    [-Xshareclasses verbose output enabled]
    JVMSHRC236I Created shared classes persistent cache demo
    JVMSHRC246I Attached shared classes persistent cache demo
    JVMSHRC765I Memory page protection on runtime data, string read-write data and partially filled pages is successfully enabled
    JVMSHRC168I Total shared class bytes read=1111375.Total bytes stored=40947096
    JVMSHRC818I Total unstored bytes due to the setting of shared cache soft max is 0.Unstored AOT bytes due to the setting of -Xscmaxaot is 0.Unstored JIT bytes due to the setting of -Xscmaxjitdata is 0.




    还可以使用                                                printStats 检查缓存统计数据,如清单 13                                                  所示:
    清单 13. 检查缓存类的数量
    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
    C:\OpenJ9>wa6480_openj9\j2sdk-image\bin\java -cp shcdemo.jar -Xshareclasses:name=demo,printStats

    Current statistics for cache "demo":

    Cache created with:
            -Xnolinenumbers                      = false
            BCI Enabled                          = true
            Restrict Classpaths                  = false
            Feature                              = cr

    Cache contains only classes with line numbers

    base address                         = 0x0000000011F96000
    end address                          = 0x0000000015140000
    allocation pointer                   = 0x000000001403FF50

    cache size                           = 52428192
    softmx bytes                         = 52428192
    free bytes                           = 10874992
    ROMClass bytes                       = 34250576
    AOT bytes                            = 1193452
    Reserved space for AOT bytes         = -1
    Maximum space for AOT bytes          = -1
    JIT data bytes                       = 28208
    Reserved space for JIT data bytes    = -1
    Maximum space for JIT data bytes     = -1
    Zip cache bytes                      = 902472
    Data bytes                           = 351648
    Metadata bytes                       = 661212
    Metadata % used                      = 1%
    Class debug area size                = 4165632
    Class debug area used bytes          = 3911176
    Class debug area % used              = 93%

    # ROMClasses                         = 17062
    # AOT Methods                        = 559
    # Classpaths                         = 3
    # URLs                               = 0
    # Tokens                             = 0
    # Zip caches                         = 5
    # Stale classes                      = 0
    % Stale classes                      = 0%

    Cache is 79% full

    Cache is accessible to current user = true




  • 现在,使用相同 Java 命令行再次启动该演示。这一次,应该会从共享类缓存中读取这些类,参见下面的清单:                                                  清单 14. 使用一个暖共享缓存来运行应用程序
    1
    2
    3
    4
    5
    6
    7
    8
    C:\OpenJ9>wa6480_openj9\j2sdk-image\bin\java -cp shcdemo.jar -Xshareclasses:name=demo,verbose -Xscmx50m ClassLoadStress
    [-Xshareclasses persistent cache enabled]
    [-Xshareclasses verbose output enabled]
    JVMSHRC237I Opened shared classes persistent cache demo
    JVMSHRC246I Attached shared classes persistent cache demo
    JVMSHRC765I Memory page protection on runtime data, string read-write data and partially filled pages is successfully enabled
    JVMSHRC168I Total shared class bytes read=36841382.Total bytes stored=50652
    JVMSHRC818I Total unstored bytes due to the setting of shared cache soft max is 0.Unstored AOT bytes due to the setting of -Xscmaxaot is 0.Unstored JIT bytes due to the setting of -Xscmaxjitdata is 0.




    可以清楚地看到类加载时间方面的显著改进(缩短了大约                                                40%)。同样地,由于操作系统优化,每次运行演示都应该看到略微的性能提升。
    图 3. 暖缓存结果
您还可以试验许多不同的情况。例如,可以使用 javaw 命令启动多个演示,触发它们一起加载类,观察并发性能。
在真实场景中,通过使用类共享获得的 JVM 启动时间总减少量取决于应用程序加载的类的数量。HelloWorld 这样的程序可能不是很明显,但大型                                Web 服务器肯定会获得较大的改进。无论如何,希望这个示例展示了对类共享进行试验是非常简单的,所以您可以轻松地测试受益程度。



返回列表