We report metaspace memory usage via different ways, among others as part of the printed heap info in GC logs. The output typically has this form:
```
Metaspace used xxx, committed xxx reserved xxx
class space used xxx, committed xxx reserved xxx
```
Here, "Metaspace" means "both non-class metaspace and class space". We report "Metaspace" and "class space" but not non-class metaspace. The fact that "class space" is part of metaspace and not just its own category is indicated by an almost imperceptible indentation.
With COH the class space usage raises (somewhat) but the use of non-class metaspace shrinks in the same amount or even to a greater degree. So the net effect should be close to zero or even slightly positive. However, folks see this:
Non-COH:
```
Metaspace used 64346K, committed 64896K, reserved 1114112K
class space used 6701K, committed 6976K, reserved 1048576K
```
COH:
```
Metaspace used 64316K, committed 64832K, reserved 1114112K
class space used 10665K, committed 10880K, reserved 1048576K
```
and understandably assume class space has gotten larger while metaspace stayed the same.
The jcmd "VM.metaspace" says it more clearly:
Non-COH:
```
Virtual space:
Non-class space: 64,00 MB reserved, 56,56 MB ( 88%) committed, 1 nodes.
Class space: 1,00 GB reserved, 6,81 MB ( <1%) committed, 1 nodes.
Both: 1,06 GB reserved, 63,38 MB ( 6%) committed.
```
COH:
```
Virtual space:
Non-class space: 64,00 MB reserved, 52,69 MB ( 82%) committed, 1 nodes.
Class space: 1,00 GB reserved, 10,62 MB ( 1%) committed, 1 nodes.
Both: 1,06 GB reserved, 63,31 MB ( 6%) committed.
```
This confusing reporting needs to be improved, and I am not sure which reporting APIs are affected by this as well.
```
Metaspace used xxx, committed xxx reserved xxx
class space used xxx, committed xxx reserved xxx
```
Here, "Metaspace" means "both non-class metaspace and class space". We report "Metaspace" and "class space" but not non-class metaspace. The fact that "class space" is part of metaspace and not just its own category is indicated by an almost imperceptible indentation.
With COH the class space usage raises (somewhat) but the use of non-class metaspace shrinks in the same amount or even to a greater degree. So the net effect should be close to zero or even slightly positive. However, folks see this:
Non-COH:
```
Metaspace used 64346K, committed 64896K, reserved 1114112K
class space used 6701K, committed 6976K, reserved 1048576K
```
COH:
```
Metaspace used 64316K, committed 64832K, reserved 1114112K
class space used 10665K, committed 10880K, reserved 1048576K
```
and understandably assume class space has gotten larger while metaspace stayed the same.
The jcmd "VM.metaspace" says it more clearly:
Non-COH:
```
Virtual space:
Non-class space: 64,00 MB reserved, 56,56 MB ( 88%) committed, 1 nodes.
Class space: 1,00 GB reserved, 6,81 MB ( <1%) committed, 1 nodes.
Both: 1,06 GB reserved, 63,38 MB ( 6%) committed.
```
COH:
```
Virtual space:
Non-class space: 64,00 MB reserved, 52,69 MB ( 82%) committed, 1 nodes.
Class space: 1,00 GB reserved, 10,62 MB ( 1%) committed, 1 nodes.
Both: 1,06 GB reserved, 63,31 MB ( 6%) committed.
```
This confusing reporting needs to be improved, and I am not sure which reporting APIs are affected by this as well.