<本文提供的设置仅仅是在高压力,多CPU,高内存环境下设置>  最近对JVM的参数重新看了下,把应用的JVM参数调整了下。  几个重要的参数 -server -Xmx3g -Xms3g -XX:MaxPermSize=128m -XX:NewRatio=1  eden/old 的比例-XX:SurvivorRatio=8  s/e的比例 -XX:+UseParallelGC -XX:ParallelGCThreads=8 &…

2014/05/10 0条评论 1672点热度 0人点赞 阅读全文

JVM调优工具 Jconsole,jProfile,VisualVM     Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里     JProfiler:商业软件,需要付费。功能强大。详细说明参考这里     VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。 如何调优 观察内存释放情况、集合类检查、对象树 上面这…

2014/05/10 0条评论 1466点热度 0人点赞 阅读全文

垃圾回收的瓶颈     传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是FullGC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚至几十毫秒以内,如果分代垃圾回收方式要达到这个指标,只能把最大堆的设置限制在一个相对较小范围内,但是这样有限制了应用本身的处理能力,同样也是不可接收的。   …

2014/05/10 0条评论 1425点热度 0人点赞 阅读全文

常见配置汇总 堆设置   -Xms:初始堆大小   -Xmx:最大堆大小   -XX:NewSize=n:设置年轻代大小   -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4   -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivo…

2014/05/10 0条评论 1279点热度 0人点赞 阅读全文

以下配置主要针对分代垃圾回收算法而言。 堆大小设置 年轻代的设置很关键     JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。在WindowsServer 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。 典型设置: java -Xmx3550m -Xms3550m -…

2014/05/10 0条评论 1348点热度 0人点赞 阅读全文

分代垃圾回收流程示意 选择合适的垃圾收集算法 串行收集器     用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器。当然,此收集器也可以用在小数据量(100M左右)情况下的多处理器机器上。可以使用-XX:+UseSerialGC打开。 并行收集器     对年轻代进行并行垃圾回收,因此可以减少垃圾回收时间。一般在多线程多处理器机器上使用。使用-XX:+UseParallelGC.…

2014/05/10 0条评论 1427点热度 0人点赞 阅读全文

为什么要分代     分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。     在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短,比如:String对象,由于其不变类…

2014/05/10 0条评论 1241点热度 0人点赞 阅读全文

如何区分垃圾     上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断。垃圾回收程序收集计数为0的对象即可。但是这种方法无法解决循环引用。所以,后来实现的垃圾判断算法中,都是从程序运行的根节点出发,遍历整个对象引用,查找存活的对象。那么在这种方式的实现中,垃圾回收从哪儿开始的呢?即,从哪儿开始查找哪些对象是正在被当前系统使用的。上面分析的堆和栈的区别,其中栈是真正进行程序执行地方,所以要获取哪些对象正在被使用,则需要从Java栈开始。同时,一个栈是与一个线程对应…

2014/05/10 0条评论 1247点热度 0人点赞 阅读全文

可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(ReferenceCounting):     比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 标记-清除(Mark-Sweep):     此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。此算法需要暂停整个应用,…

2014/05/10 0条评论 1275点热度 0人点赞 阅读全文

Java对象的大小     基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。     在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下语句: Objectob = new Object();     这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte+8byte。4by…

2014/05/10 0条评论 1283点热度 0人点赞 阅读全文
13456711