这个问题在这里已有答案:
ENV:jdk8 垃圾:g1
jvm paras:-Xms30G -Xmx30G -XX:MaxDirectMemorySize = 1G -XX:MetaspaceSize = 500m -XX:MaxMetaspaceSize = 1G
程序运行很长时间顶级命令通知Res是60G或更多。我想知道这个问题的原因。谁有过这样的问题?帮我
-Xmx是最大堆大小。它不是最大的流程大小。您正在使用其他资源,如线程,套接字,GUI,直接内存,共享库,元空间,内存映射文件。
我会说;直接内存是最有可能的,特别是因为默认情况下它的最大大小与堆相同,但是@apangin指出你已经将最大值设置为1 GB。
我不知道找到使用多少直接内存的简单方法,但是在Oracle JVM上,您可以获得java.nio.Bits#reservedMemory
,因为它具有当前分配的数量。