JVM参数调优
基本常识 堆内存 = Eden + old + Metaspace(perm) 总内存 = 堆 + 栈 + 堆外内存 + jvm等内部使用的内存 system.gc最常见的场景是RMI/NIO下的堆外内存分配等 java -verbose:class -version:查看jvm启动时被加载的类 OutOfMemoryError 分配内存当Eden内存不够用的时候,某些情况下会尝试到Old里进行分配(比如说要分配的内存很大),如果还是没有分配成功,于是会触发一次ygc的动作,而ygc完成之后我们会再次尝试分配,如果仍不足以分配此时的内存,那会接着做一次full gc(不过此时的soft reference不会被强制回收),将老生代也回收一下,接着再做一次分配,仍然不够分配那会做一次强制将soft reference也回收的full gc,如果还是不能分配,那这个时候就抛出OutOfMemoryError perm用来存klass、method、constantPool等信息,klass是我们熟知的class文件在jvm里的运行时数据结构 内存相关(常用) -Xms:设置程序启动时的初始堆大小(如 -Xms4g,jvm启动时,分配最小堆大小4g) -Xmx:设置程序能获得的最大堆大小(如 -Xmx4g,jvm启动时,允许分配的最大的堆大小4g。一般设定为同一个值