前言: 公司有一个资产统计系统,使用频率很低,但是要求在使用时查询速度快,因此想到做一些缓存放在内存中,在长时间没有使用,持久化到磁盘中,并对垃圾进行回收,归还物理内存给操作系统,从而节省宝贵资源给其它业务系统.当我做好缓存时,却发现了一个棘手的问题,通过程序释放资源并通知GC回收资源后,堆内存的已用内存减少了,空闲内存增加了,可是进程占用系统内存却没有减少.查阅了很多资料,也尝试过很多次,都没有完美解决问题.直到后来看到一段评论谈及G1垃圾回收器,才恍然大悟. 接下来,通过一个小demo给大家…
调优设置具体解析 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作系统对内存无限制. 在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m. 典型设置: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k  -Xms3550m:设置JVM最大可用堆内存为355…
目录 1.Java虚拟机内存模型 1.1 程序计数器 1.2 Java虚拟机栈 局部变量 1.3 本地方法栈 1.4 Java堆 1.5 方法区(永久区.元空间) 附图 2.JVM内存分配参数 2.1 设置最大堆内存 2.2 设置最小堆内存 2.3 设置新生代 2.4 设置持久代 2.5 设置线程栈 2.6 堆的内存分配 2.7 堆分配参数总结 3.垃圾收集基础 3.1 垃圾收集的作用 3.2 垃圾回收算法与思想 3.2.1 引用计数法(Reference Counting) 3.2.2 标记-…
本文部分内容出自https://blog.csdn.net/yang_net/article/details/5830820 调优步骤: 衡量系统现状. 设定调优目标. 寻找性能瓶颈. 性能调优. 衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈). 性能调优结束. JVM调优(最关键参数为:-Xms -Xmx -Xmn -XX:SurvivorRatio   -XX:MaxTenuringThreshold 代大小调优 避免新生代大小设置过小             避免新生代大小设置过大…
在生产系统中,高吞吐和低延迟一直都是JVM调优的最终目标,但这两者恰恰又是相悖的,鱼和熊掌不可兼得,所以在调优之前要清楚舍谁而取谁.一般计算任务和组件服务会偏向高吞吐,而web展示则偏向低延迟才会带来更好的用户体验. 本文从性能和经验上来分享一下JVM参数的设置. 调优之前可以先用-XX:+PrintFlagsFinal来查看虚拟机是否默认开启某参数,不同版本的JDK可能虚拟机默认开启的参数也略有不同,新学习一条神奇的参数的时候可以先去查找一下参数是否默认开启了. $ java -server…
基本概念: JVM把内存区分为堆区(heap).栈区(stack)和方法区(method).由于本文主要讲解JVM调优,因此我们可以简单的理解为,JVM中的堆区中存放的是实际的对象,是需要被GC的.其他的都无需GC. 下图文JVM的内存模型 从图中我们可以看到, 1.JVM实质上分为三大块,年轻代(YoungGen),年老代(Old Memory),及持久代(Perm,在Java8中被取消,我们不做深入介绍). 2.垃圾回收GC,分为2种,一是Minor GC,可以可以称为YGC,即年轻代GC,…
JVM调优的本质: 并不是显著的提高系统性能,不是说你调了,性能就能提升几倍或者上十倍,JVM调优,主要调的是稳定.如果你的系统出现了频繁的垃圾回收,这个时候系统是不稳定的,所以需要我们来进行JVM调优,调整垃圾回收的频次. GC调优原则 调优的原则 1. 大多数的java应用不需要GC调优 2. 大部分需要GC调优的的,不是参数问题,是代码问题 3. 在实际使用中,分析GC情况优化代码比优化GC参数要多得多: 4. GC调优是最后的手段 目的 GC的时间够小 GC的次数够少 发生Full GC…
这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数.JVM调优方法(流程).JVM调优工具.JVM调优案例,调优案例目前正在分析,会在将来补上. 垃圾回收有关参数 参数部分,这儿只是做一个总结,更详细更新的内容请参考Oracle官网:JVM的命令行参数参考 处理器组合参数 关于JVM垃圾处理器区别,参考:JVM调优之垃圾定位.垃圾回收算法.垃圾处理器对比 -XX:+Use…
1.调优原则 JVM调优听起来很高大上,但是要认识到,JVM调优应该是Java性能优化的最后一颗子弹. 比较认可廖雪峰老师的观点,要认识到JVM调优不是常规手段,性能问题一般第一选择是优化程序,最后的选择才是进行JVM调优. JVM的自动内存管理本来就是为了将开发人员从内存管理的泥潭里拉出来.即使不得不进行JVM调优,也绝对不能拍脑门就去调整参数,一定要全面监控,详细分析性能数据. 2.JVM调优的时机 不得不考虑进行JVM调优的是那些情况呢? Heap内存(老年代)持续上涨达到设置的最大内存值…
GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种类型的问题: 忘记回收 多次回收 没有任何引用指向的一个对象或者多个对象(循环引用) 2.如何定位垃圾 引用计数(ReferenceCount) 根可达算法(RootSearching) 3.常见的垃圾回收算法 标记清除(mark sweep) - 位置…