`
- 浏览:
204037 次
-
按照官方的说法:Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。在JVM中堆之外的内存称为非堆内存。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所有方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
堆内存分配:
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64,默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制。MinHeapFreeRatio参数可以调整。
JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4,空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。MaxHeapFreeRatio参数可以调整。
因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
堆内存内部分配:
-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。整个堆大小=新生代大小+老生代大小+永久代大小。在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,默认值为8。两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10。
非堆内存分配:
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
线程分配:
-Xss:每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。应根据应用的线程所需内存大小进行适当调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。一般小的应用,如果栈不是很深,应该是128k够用的,大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。
内存相关常见JVM参数
感谢金丝燕大学校长
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
关于java的内存分配问题,jvm的运行原理相关资料总结
主要是JVM内存分配及简单的JVM性能调优
NULL 博文链接:https://younglibin.iteye.com/blog/1959816
JVM初始分配的内存.doc JVM初始分配的内存.doc
虽然Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在栈中分配,也就是说在建立一个对象时在堆和栈中都分配内存,在堆中分配的内存实际存放这个被创建的对象的本身,而在栈中分配的内存只是存放...
个人整理 jvm相关知识 包括内存分配机制 垃圾回收机制 垃圾收集器相关 及 垃圾收集算法
JVM内存段分配,Java垃圾回收调优,Heap设定
1、JVM 内存分配图解的 Visio 工程图。 2、直接下载使用、可自行调整和修改
详细介绍了JVM 内存管理相关知识 内存空间( VM运行时数据区域) ◦ 内存结构 ◦ 内存空间 内存分配 内存回收(GC) 内存分析工具
1.1 对象优先在Eden区分配 1.2 大对象直接进入老年代 1.3 长期存活的对象将进入老年代
JVM垃圾回收器和内存分配策略
Jvm对象内存分配理解
2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...
jvm内存分配j
JVM(Java虚拟机)的整个流程:发展,运行区域,垃圾回收器,内存分配策略,垃圾收集,JVM分析工具,JVM优化
非常详细的解析了Java内存的分配和结构,还运用了大量了例子,值得一看!
关于java内存分配的讲述。JAVA 文件编译执行与虚拟机(JVM)介绍