文章目录
- JVM的历史
- Java内存结构
-
- 堆
- 栈
- 方法区
- JVM参数配置
-
- 配置参数详解
- 设置最大堆内存
- 设置新生代比例参数
- 设置新生与老年代代参数
- 设置栈内存大小
- JVM参数调优总结
- 内存溢出和内存泄漏的区别
- JVM垃圾回收机制概述
-
- finalize作用
- 垃圾回收机制算法
-
- 如何找到找到垃圾(确定谁是垃圾)
-
- 引用计数法
- 可达性分析算法
- 垃圾如何回收(找到了垃圾,如何回收)
-
- 标记清除算法
- 标记-压缩算法
- 复制算法
- 分代收集算法
- 为什么老年代使用标记压缩、新生代使用复制算法。
-
- 垃圾回收时的停顿现象
- 垃圾收集器
-
- 什么是Java垃圾回收器
- 串行回收器(Serial Collector)
- 并行回收器(ParNew回收器)
- 并行回收集器(ParallelGC)
- 并CMS(并发GC)收集器
- G1回收器
- Tomcat配置调优测试
-
- Jmeter压力测试工具
JVM的历史
所谓虚拟机,就是一台虚拟的机器。他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为
系统虚拟机和程序虚拟机, 大名鼎鼎的Visual Box、Vmare就属于系统虚拟机,他们完全是对物理计算的仿真,
提供了一个可以运行完整操作系统的软件平台。
程序虚拟机典型代码就是Java虚拟机,它专门为执行单个计算程序而计算,在Java虚拟机中执行的指令我们成为Java
自己码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。
Java发展至今,出现过很多虚拟机,做初Sun使用的一款叫ClassIc的Java虚拟机,到现在引用最广泛的是HotSpot虚拟
机,除了Sum意外,还有BEA的Jrockit,目前Jrockit和HostSopt都被oralce收入旗下,大有整合的趋势。
Java内存结构
栈
设置新生代比例参数
参数: -Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC
设置新生与老年代代参数
-Xmn 新生代大小,一般设为整个堆的1/3到1/4左右
-XX:SurvivorRatio 设置新生代中eden区和from/to空间的比例关系n/1
-Xms20m -Xmx20m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC
-Xms20m -Xmx20m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC
-XX:NewRatio=2
总结:不同的堆分布情况,对系统执行会产生一定的影响,在实际工作中,
应该根据系统的特点做出合理的配置,基本策略:尽可能将对象预留在新生代,
减少老年代的GC次数。
除了可以设置新生代的绝对大小(-Xmn),可以使用(-XX:NewRatio)设置新生代和老年
代的比例:-XX:NewRatio=老年代/新生代
Tomcat内存溢出在catalina.sh 修改JVM堆内存大小
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!