JVM内存和GC相关的资料汇总
来源:互联网 发布:劳拉西泮片 知乎 编辑:程序博客网 时间:2024/06/07 03:31
java堆、栈、本地方法栈、方法区相关的资料
堆
所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成,结构图如下所示:
- 新生代。新建的对象都是用新生代分配内存,Eden空间不足的时候,会把存活的对象转移到Survivor中,新生代大小可以由-Xmn来控制,也可以用-XX:SurvivorRatio来控制Eden和Survivor的比例
- 旧生代。用于存放新生代中经过多次垃圾回收仍然存活的对象
栈
每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用于存放此次方法调用过程中的临时变量、参数和中间结果
本地方法栈
用于支持native方法的执行,存储了每个native方法调用的状态
方法区
存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息。JVM用持久代(Permanet Generation)来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值
关于FULL GC
导致Full GC一般由于以下几种情况:
- 旧生代空间不足
调优时尽量让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要创建过大的对象及数组避免直接在旧生代创建对象 - Pemanet Generation空间不足
增大Perm Gen空间,避免太多静态对象 - 统计得到的GC后晋升到旧生代的平均大小大于旧生代剩余空间
控制好新生代和旧生代的比例 - System.gc()被显示调用
垃圾回收不要手动触发,尽量依靠JVM自身的机制
由于对年轻代的复制收集,必须停止所有应用程序线程,原理如此,只能靠多CPU,多收集线程并发来提高收集速度。
jvm配置说明:
- 堆设置
- -Xms:初始堆大小
- -Xmx:最大堆大小
- -XX:NewSize=n:设置年轻代大小
- -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
- -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
- -XX:MaxPermSize=n:设置持久代大小
- 收集器设置
- -XX:+UseSerialGC:设置串行收集器
- -XX:+UseParallelGC:设置并行收集器
- -XX:+UseParalledlOldGC:设置并行年老代收集器
- -XX:+UseConcMarkSweepGC:设置并发收集器
- 垃圾回收统计信息
- -XX:+PrintGC
- -XX:+PrintGCDetails
- -XX:+PrintGCTimeStamps
- -Xloggc:filename
- 并行收集器设置
- -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
- -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
- -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
- 并发收集器设置
- -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
- -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。
- JVM内存和GC相关的资料汇总
- jvm内存相关资料
- JVM的内存结构和GC机制
- JVM内存管理和GC
- JVM 内存和GC机制
- Minor GC、Major GC和Full GC之间的区别及JVM内存分布,JVM垃圾回收初解-JVM
- JVM内存和GC的分析 --- jstack pid
- JVM内存管理&GC机制 原理资料收集
- 7.JVM GC时的内存管理工作流程和频繁GC的原因
- JVM内存划分和GC机制
- JVM内存分区和GC回收算法
- jvm 内存和GC参数以及经验值
- JVM内存管理和GC机制
- 关于jvm内存模型和gc回收
- jvm的GC相关概念及GC的监控
- jvm的GC相关概念及GC的监控
- [基础]Java内存和GC汇总
- JQuery相关的资料汇总
- 107个常用javascript语句
- 俄罗斯方块88行 代码注释版 (二)
- boost::function和boost::bind
- 构建高性能服务(二)减小锁粒度 提高Java并发吞吐实例
- App Store崩溃折射苹果缺乏保护开发者和用户的手段!
- JVM内存和GC相关的资料汇总
- Linux系统调用函数
- 异步FIFO设计
- 内存分配访问无效
- XmlSerializer 对象的Xml序列化和反序列化
- 简单的 Winsock 应用程式设计
- 1706 子串之王
- 一款简易的页面加载进度显示条
- 工作就是这么简单——去哪儿网CTO吴永强