jvm虚拟机

来源:互联网 发布:三星s5注册网络 编辑:程序博客网 时间:2024/06/02 01:59

深入理解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 spaceat 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>的空间效率分析









原创粉丝点击