jvm相关设置

时间:2019-08-29
本文章向大家介绍jvm相关设置,主要包括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)

原文地址:https://www.cnblogs.com/nanbcdx/p/11429244.html