- JDK8
- JVM内存结构
- GC作用域
- 常见垃圾回收算法
- GC Roots ?
- JVM 参数
- -XX:+ PrintGCDetails 打印解释
- -XX:SurvivorRatio=8
- -XX:NewRatio=2 设置老年代占比
- -XX:MaxTenuringThreshold 设置垃圾最大年龄
- 强引用 Reference
- 软引用 SoftReference
- 弱引用 WeakReference
- 虚引用 PhantomReference
引用计数(不常用)
复制
标记清除
标记整理
JVM 确定垃圾,根节点判断
JVM 参数基本参数
JVM 参数 1.标配参数 -version -help 2.X参数 3.xx参数 booleen参数 -XX + 是 - 否 -XX:+ PrintGCDetails 打印GC日志 key 参数 -XX:metaspaceSize=128m Jinfo 查看配置项 jinfo -flag 配置项 进程编号 查看参数 原始的 -XX:+PrintFlagsInitial 修改的 -XX:+PrintFlagsFinal 打印命令行参数 java -XX:+PrintCommandLineFlags -version -Xms 初始大小内存 -Xmx 最大分配内存 -Xss 1024k 栈内存 -Xmn 设置年轻代大小 -XX:metaspaceSize 设置元空间大小,不在虚拟机,使用本地内存
一些值打印
System.out.println("电脑核心线程数" + Runtime.getRuntime().availableProcessors()); long totalMemory=Runtime.getRuntime().totalMemory();// 返回java虚拟机内存总量 long maxMemory=Runtime.getRuntime().maxMemory();//返回java虚拟机内存最大内存量 System.out.println("TOTAL MEMORY(-Xms) = " + totalMemory + " (字节) . " + (totalMemory / (double) 1024 / 1024) +"MB"); System.out.println("MAx MEMORY(-Xmx) = " + maxMemory + " (字节) . " + (maxMemory / (double) 1024 /1024) +"MB");-XX:+ PrintGCDetails 打印解释
GC
Full GC
设置新生代eden 和S0 / S1空间的比例
默认 -XX:SurvivorRatio=8 ,Eden:S0 :S1 8:1:1
-XX:SurvivorRatio=4 ,Eden:S0 :S1 4:1:1
设置年轻代和老年代在堆结构中的比例
默认 -XX:NewRatio=2 ,新生代占1,老年代2 ,年轻代占堆三分之一
-XX:NewRatio=4 ,新生代占1,老年代4 ,年轻代占堆五分之一
OOM了都不会回收
例子:
需要用java.lang.ref.SoftReference 类实现,让对象豁免一些垃圾回收。
系统内存充足 不会 被回收
系统内存不足 会 被回收
内存够用就保留,不够用就回收
应用读取大量本地图片
HashMap 保存路径和相应图片对象关联软引用映射关系,内存不足,会自动回收避免OOM
只要执行垃圾回收,不管JVM空间是否足够,都会回收
虚引用 PhantomReference顾名思义是形同虚设 ,需要和引用队列一起使用ReferenceQueue联合使用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)