Eclipse OpenJ9 中的类共享(3)共享类实用程序
- UID
- 1066743
|
Eclipse OpenJ9 中的类共享(3)共享类实用程序
共享类实用程序可以使用一些实用程序来管理共享类缓存,所有这些实用程序都是 -Xshareclasses 的 。(可以通过 java -Xshareclasses:help 获取所有子选项的完整列表。)
为了演示这些选项的用法,让我们来看一些示例。
首先,让我们用不同的缓存名称运行 Hello 类来创建两个共享缓存,如清单 1 所示:
清单 1. 创建两个共享缓存1
2
3
4
| C:\OpenJ9>wa6480_openj9\j2sdk-image\bin\java -cp .-Xshareclasses:name=Cache1 Hello
Hello
C:\OpenJ9>wa6480_openj9\j2sdk-image\bin\java -cp .-Xshareclasses:name=Cache2 Hello
Hello
|
运行 listAllCaches 子选项会列出系统上的所有缓存,并确定它们是否已被使用,如清单 2 所示:
清单 2. 列出所有共享缓存1
2
3
4
5
6
| C:\OpenJ9>wa6480_openj9\j2sdk-image\bin\java -Xshareclasses:listAllCaches
Listing all caches in cacheDir C:\Users\Hang Shao\AppData\Local\javasharedresources\
Cache name level cache-type feature last detach time
Compatible shared caches
Cache1 Java8 64-bit persistent cr Mon Apr 23 15:48:12 2018
Cache2 Java8 64-bit persistent cr Mon Apr 23 15:49:46 2018
|
运行 printStats 选项会输出指定缓存上的摘要统计数据,如清单 3 所示。要获得关于 printStats 选项的详细描述,请参阅 。
清单 3. 一个共享缓存的摘要统计数据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 -Xshareclasses:name=Cache1,printStats
Current statistics for cache "Cache1":
Cache created with:
-Xnolinenumbers = false
BCI Enabled = true
Restrict Classpaths = false
Feature = cr
Cache contains only classes with line numbers
base address = 0x000000001214C000
end address = 0x0000000013130000
allocation pointer = 0x0000000012297DB8
cache size = 16776608
softmx bytes = 16776608
free bytes = 13049592
ROMClass bytes = 1359288
AOT bytes = 72
Reserved space for AOT bytes = -1
Maximum space for AOT bytes = -1
JIT data bytes = 1056
Reserved space for JIT data bytes = -1
Maximum space for JIT data bytes = -1
Zip cache bytes = 902472
Data bytes = 114080
Metadata bytes = 18848
Metadata % used = 0%
Class debug area size = 1331200
Class debug area used bytes = 132152
Class debug area % used = 9%
# ROMClasses = 461
# AOT Methods = 0
# Classpaths = 2
# URLs = 0
# Tokens = 0
# Zip caches = 5
# Stale classes = 0
% Stale classes = 0%
Cache is 22% full
Cache is accessible to current user = true
|
还有其他一些 printStats 子选项可用来输出共享缓存中的特定数据。可以在 printStats=help 中找到它们。例如,可以通过 printStats=classpath 检查类路径数据:
清单 4. 列出共享缓存的类路径内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| C:\OpenJ9>wa6480_openj9\j2sdk-image\bin\java -Xshareclasses:name=Cache1,printStats=classpath
Current statistics for cache "Cache1":
1: 0x000000001360E3FC CLASSPATH
C:\OpenJ9\wa6480_openj9\j2sdk-image\jre\bin\compressedrefs\jclSC180\vm.jar
C:\OpenJ9\wa6480_openj9\j2sdk-image\jre\lib\se-service.jar
C:\OpenJ9\wa6480_openj9\j2sdk-image\jre\lib\rt.jar
C:\OpenJ9\wa6480_openj9\j2sdk-image\jre\lib\resources.jar
C:\OpenJ9\wa6480_openj9\j2sdk-image\jre\lib\jsse.jar
C:\OpenJ9\wa6480_openj9\j2sdk-image\jre\lib\charsets.jar
C:\OpenJ9\wa6480_openj9\j2sdk-image\jre\lib\jce.jar
C:\OpenJ9\wa6480_openj9\j2sdk-image\jre\lib\tools.jar
1: 0x000000001360A144 CLASSPATH
C:\OpenJ9
…
…
|
共享缓存可使用 destroy 选项进行销毁,如清单 5 所示。类似地,destroyAll 会销毁所有未使用且用户有权销毁的缓存。
清单 5. 销毁一个缓存1
2
| C:\OpenJ9>wa6480_openj9\j2sdk-image\bin\java -Xshareclasses:name=Cache1,destroy
JVMSHRC806I Compressed references persistent shared cache "Cache1" has been destroyed.如果想要销毁非压缩引用缓存,可以使用 -Xnocompressedrefs 选项。
|
如清单 6 所示,expire 选项是一个清理选项,您可以将其添加到命令行,以便自动销毁在指定分钟数内未附加任何内容的缓存。清单 6 查找一周(10,080 分钟)内未使用过的缓存,并在启动 JVM 之前销毁它们。
reset 选项总是创建一个新的共享缓存。如果存在同名的缓存,则销毁它并创建一个新的缓存。
清单 6. 销毁一周内未使用过的缓存1
2
| C:\OpenJ9>wa6480_openj9\j2sdk-image\bin\java -Xshareclasses:name=Cache1,expire=10080 Hello
Hello
|
|
|
|
|
|
|