运行时数据区概述
????整个JVM构成里面,由三部分组成:类加载系统、运行时数据区、执行引擎
1、JVM运行时数据区规范
????从职责以及线程使用情况分为两类 ????????一类是方法区和堆:作用为数据存储 —>垃圾回收区域 线程共享 ????????????方法区:运行时常量池,类的元数据等 ????????????堆:对象、数组等 ????????第二类和线程息息相关(线程执行区域)如栈,程序计数器、本地方法栈 ????????????线程有才有这块儿区域,线程没来,是没有这块区域的, ????????????但定义早就定义好了,只是创不创建的问题数据先进入方法区—> 有些对象会被创建所以牵扯到堆 ---->线程来了会分配空间
2、分配JVM内存大小
????分配堆的大小
????????-Xms(堆的初始容量) ????????-Xmx(堆的最?容量)
????????-XX:InitialHeapSize=268435456 ????????-XX:MaxHeapSize=4294967296 ???? 如果为了提?性能,可以考虑去浪费空间,就是将初始容量和最?容量相等(互联网项目,因为分配空间耗资源很大,空间换时间)
????分配方法区的大小
????????方法区是一个抽象概念,需要落地实现,永久代和元空间都是他的实现,1.8以后用的元空间
????????-XX:PermSize ???????????? 永久代的初始容量 ????????-XX:MaxPermSize ???????????? 永久代的最?容量
????????-XX:MetaspaceSize ???????????? 元空间的初始??,达到该值就会触发垃圾收集进?类型卸载,同时GC会对 ???????????? 该值进?调整:如果释放了?量的空间,就适当降低该值;如果释放了很少的空 ???????????? 间,那么在不超过MaxMetaspaceSize时,适当提?该值。 ????????-XX:MaxMetaspaceSize ???????????? 最?空间,默认是没有限制的。
????除了上面两个指定大小的选项以外,还有两个与GC相关的属性:
????????-XX:MinMetaspaceFreeRatio ???????????? 在GC之后,最?的Metaspace剩余空间容量的百分?,减少为分配空间所导 ???????????? 致的垃圾收集 ????????-XX:MaxMetaspaceFreeRatio ???????????? 在GC之后,最?的Metaspace剩余空间容量的百分?,减少为释放空间所导 ???????????? 致的垃圾收集
????分配线程空间的大小
????????多线程情况下,会遇到栈空间不足的情况
????????-Xss: ???????????? 为jvm启动的每个线程分配的内存??,默认JDK1.4中是256K,JDK1.5+中 是1M
在接下来的文章中会逐个详细介绍方法区,堆,字符串常量池,可以点个关注第一时间阅读文章
|