解析JVM内存管理机制的几个概念
Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在Java虚拟机启动时创建的,而JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64。
JVM内存管理机制
堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在Java虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heapmemory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
堆内存分配
JJVM内存管理机制中VM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC后调整堆的大小。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
相关推荐
ljbhander 2020-08-07
emlinux 2020-06-22
fenxinzi 2020-06-21
兰海泽 2019-12-12
Proudoffaith 2019-12-08
拉斯厄尔高福 2020-11-04
ThinkInLinux 2020-09-30
xiaobaichen 2020-07-30
mingrixing 2020-07-28
iammjun 2020-07-07
huanmie 2020-06-16
chenzhaoguo 2020-06-08
ThinkingLink 2020-05-29
wangqing 2020-05-19
pointfish 2020-05-08
cleanerxiaoqiang 2020-05-08
qingsongzdq 2020-05-01
zuixin 2020-04-19