jvm相关设置
内存空间
jvm启动运行Class文件时对JVM内存进行切分,可以将其分为线程共享区和线程隔离区
jvm运行时内存架构如下:
在JDK8中持久代(Permanent Generation)部分数据移到了元数据区(Metaspace),在JDK8中已经没有持久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现,不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小。
heap space(堆内存)
1) 虚拟机启动时创建,被所有线程共享, 用于存放所有java对象实例.
2) 可分为年轻代(eden)和老年代(Tenured)。
3) 是垃圾收集器(GC)管理的主要区域
4) 堆中没有内存分配时将会抛出OutOfMemoryError
对象内存分配说明:
新创建的对象一般都分配在年轻代中,当对象比较大时年轻代没有足够的空间还可以直接分配到老年代中,
有时候系统为了减少GC开销,对于小对象且没有逃逸的对象还可以直接在栈上分配
参数设置:
-Xms 设置堆内存的初始空间
-Xmx 设置堆内存的最大空间
-XX:NewSize 设置新生代的最小空间大小
-XX:MaxNewSize 设置新生代最大空间大小
-Xss: 设置每个线程的堆栈大小
Method Area(方法区)
概要:
1.非堆内存,逻辑上的定义,用于存储类的方法信息
2.不同jdk,方法区的实现 不同,JDK8中的方法区对应的是MetSpace,是一块本地内存
配置参数:
-XX:PermSize 设置永久代最小空间大小(JDK8已弃用)
-XX:MaxPermSize 设置永久代最大空间大小(JDK8已弃用)
-XX:MetaspaceSize 设置元数据区的最小空间(JDK8)
-XX:MaxMetaspaceSize 设置元数据区的最大空间(JDK8)