jvm虚拟机

深入理解java虚拟机  第二版


代码清单2-3  

-verbose:gc -Xms20M -Xmx20M -XX:+PrintGCDetails

[GC (Allocation Failure) [PSYoungGen: 5267K->504K(6144K)] 5267K->3689K(19968K), 0.0093301 secs] [Times: user=0.03 sys=0.02, real=0.01 secs] 
[GC (Allocation Failure) [PSYoungGen: 6045K->504K(6144K)] 9230K->8240K(19968K), 0.0089480 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
[Full GC (Ergonomics) [PSYoungGen: 6136K->0K(6144K)] [ParOldGen: 10901K->12845K(13824K)] 17037K->12845K(19968K), [Metaspace: 2599K->2599K(1056768K)], 0.2414392 secs] [Times: user=0.41 sys=0.00, real=0.24 secs] 
[Full GC (Ergonomics) [PSYoungGen: 3564K->3001K(6144K)] [ParOldGen: 12845K->13356K(13824K)] 16409K->16358K(19968K), [Metaspace: 2599K->2599K(1056768K)], 0.1785501 secs] [Times: user=0.61 sys=0.00, real=0.18 secs] 
[Full GC (Allocation Failure) [PSYoungGen: 3001K->3001K(6144K)] [ParOldGen: 13356K->13345K(13824K)] 16358K->16346K(19968K), [Metaspace: 2599K->2599K(1056768K)], 0.1397200 secs] [Times: user=0.41 sys=0.00, real=0.14 secs] 
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Unknown Source)
	at java.util.Arrays.copyOf(Unknown Source)
	at java.util.ArrayList.grow(Unknown Source)
	at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
	at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
	at java.util.ArrayList.add(Unknown Source)
	at jvm.HeapOOM.main(HeapOOM.java:19)
Heap
 PSYoungGen      total 6144K, used 3224K [0x00000000ff980000, 0x0000000100000000, 0x0000000100000000)
  eden space 5632K, 57% used [0x00000000ff980000,0x00000000ffca62f8,0x00000000fff00000)
  from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
  to   space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
 ParOldGen       total 13824K, used 13345K [0x00000000fec00000, 0x00000000ff980000, 0x00000000ff980000)
  object space 13824K, 96% used [0x00000000fec00000,0x00000000ff908450,0x00000000ff980000)
 Metaspace       used 2630K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 291K, capacity 386K, committed 512K, reserved 1048576K



代码清单2-4  栈溢出

-Xss128K 

代码清单2-8  cglib

/**
 * VM Args: -XX:PermSize=10M -XX:MaxPermSize=10M
 * @author zzm
 */
public class JavaMethodAreaOOM {

	public static void main(String[] args) {
		while (true) {
			Enhancer enhancer = new Enhancer();
			enhancer.setSuperclass(OOMObject.class);
			enhancer.setUseCache(false);
			enhancer.setCallback(new MethodInterceptor() {
				public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
					return proxy.invokeSuper(obj, args);
				}
			});
			enhancer.create();
		}
	}

	static class OOMObject {

	}
}


3.2.3节 

引用

import java.lang.ref.PhantomReference;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

软引用

SoftReference<T>

弱引用

WeakReference<T>

虚引用 

PhantomReference<T>


3.5.9 垃圾收集器参数总结

1.与串行回收器相关的参数
-XX:+UseSerialGC:在新生代和老年代使用串行收集器
-XX:SurvivorRatio:设置eden区大小和survivor区大小的比例
-XX:PretenureSizeThreshold:设置大对象直接进入老年代的阈值。当对象的大小超过这个值时,将直接在老年代分配。
-XX:MaxTenuringThreshold:设置对象进入老年代的年龄的最大值。每一次Minor GC后,对象年龄就加1。任何大于这个年龄的对象,一定会进入老年代。
2.与并行GC相关的参数
-XX:+UseParNewGC:在新生代使用并行收集器
-XX:+UseParallelOldGC:老年代使用并行回收收集器
-XX:ParallelGCThreads:设置用于垃圾回收的线程数。通常情况下可以和CPU数量相等,但在CPU数量较多的情况下,设置相对较小的数值也是合理的。
-XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间。他的值是一个大于0的整数。收集器在工作时,会调整Java堆大小或者其他参数,尽可能把停顿时间控制在MaxGCPauseMillis以内。
-XX:GCTimeRatio:设置吞吐量大小。它是0-100的整数。假设GCTimeRatio的值为n,那么系统将花费不超过1/(1+n)的时间用于垃圾收集。
-XX:+UseAdaptiveSizePolicy:打开自适应GC策略。在这种模式下,新生代的大小、eden和survivor的比例、晋升老年代的对象年龄等参数会被自动调整,已达到在堆大小、吞吐量和停顿时间之间的平衡点。
3.与CMS回收期相关的参数
-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
-XX:ParallelCMSThreads:设定CMS的线程数量
-XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发,默认为68%
-XX:+UseCMSCompactAtFullCollection:设置CMS收集器完成垃圾收集后是否要进行一次内存碎片的整理
-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩
-XX:+CMSClassUnloadingEnabled:允许对类元数据区进行回收
-XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收(前提是-XX:+CMSClassUnloadingEnabled激活了)
-XX:UseCMSInitiatingOccupancyOnlyn:表示只在到达阈值的时候才进行CMS回收
-XX:+CMSIncrementalMode:使用增量模式,比较适合单CPU。增量模式在JDK 8中标记为废弃,并将在JDK 9中彻底移除。
4.与G1回收期相关的参数
-XX:+UseG1GC:使用G1回收器
-XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间
-XX:GCPauseIntervalMillis:设置停顿间隔时间
5.TLAB相关
-XX:+UseTLAB:开启TLAB分配
-XX:+PrintTLAB:打印TLAB相关分配信息
-XX:TLABSize:设置TLAB大小
-XX:+ResizeTLAB:自动调整TLAB大小
6.其他参数
-XX:+DisableExplicitGC:禁用显式GC
-XX:+ExplicitGCInvokesConcurrent:使用并发方式处理显式GC


-XX:+HeapDumpOnOutOfMemoryError

JDK逻辑集群

分析缺陷:

硬件双核16G

5个32位jdk逻辑集群,进程算2GB(堆固定1.5GB),占用10G内存,文档服务器(cms收集器),JbossCacahe全局缓存

HashMap<long,long>的空间效率分析









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值