热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaPerformanceTuning笔记

pdf在这里:http:mfinocchiaro.files.wordpress.com200807java-virtual-machine-neutral.pdf以及关于gc的

pdf在这里: http://mfinocchiaro.files.wordpress.com/2008/07/java-virtual-machine-neutral.pdf

其实这篇文章比较早,主要是针对当时的java 4,java 5,只是一个基本参考.

HotSpot VM Heap Layout
Young Generation: Eden Spce | Suvivor Space(From Space & To Space)
Old Generation: Tenured Space
Permanent Generation: Permanent Space
Young Generatio大小使用-Xmn选项指定,而Suvivor Space大小则用-XX:SurviorRatio指定,注意From Space和To Space大小相同,该选项指定的是Eden Space大小/From(or to) Space大小.
如果Young generation满了就调用Scavenge GC(即Minor GC),Eden Space中未被回收的对象进入From,而每次minor GC结束之后,from和to指针对换.如果一个对象在几次minor gc之后仍然幸存则从to space提升到old generation.
old generation大小使用-Xms(初始大小)和-Xmx(最大大小)指定,32位系统在不同架构下Xmx有大小限制.指定-d64后使用64位jvm,性能下降5%-20%.
Permanent Generation用于保留class file.主要是编译的class和jsp页面.如果该空间满了会调用Full GC,使用-XX:PermSize和-XX:MaxPermSize指定.
RMI协议或者java用户可以显式调用System.gc()调用Full GC,可以使用-XX:+DisableExplicitGC选项禁止显式调用.
Default Garbage Collection Algorithms
分别是Minor GC和Full GC.
Java1.4后Minor GC可以使用多线程(ParallelGCThreads),但如果多于CPU核心数仍会是瓶颈.
Full GC在回收时会对heap中对象扫描两次,如果第二次扫描时仍未完成回收,它们将被加入下次Full GC的回收队列.因此FullGC非常耗时,jvm tuning就是要减少Full GC并确保不发生OOME(Out Of Memory Error).

Alternative Garbage Collectors

Parallel Copy GC:用在Eden Space,使用选项-XX:+UseParNewGC和-XX:ParallelGCThreads指定.

Concurrent Mark-and-Sweep:基于mark-and-sweep算法进行回收,使用选项-xx:UseConMarkSweepGC指定.

-XX:+UseCMSCompactAtFullCollection  default
true 对老年代进行压缩,可能影响性能,但是可以消除碎片。


-XX:CMSFullGCsBeforeCompaction=n
CMS进行n次full gc后进行一次压缩。
如果n=0,每次full gc后都会进行碎片压缩

CMS需要更多的内存,一方面是碎片问题,另一方面是对老年代回收不是在老年代满的时候,而是当老年代内存达到一定比例。

-XX:CMSIntiatingOccupancyFractio=n 当老年代内存使用达到n%,开始会后
jdk5 默认是68% 


Monitoring GC Duration & Frequency

通过ps或jps命令找到pid后,使用jstat -gc命令查看,如我在服务器上看到的Home server是这样的:

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
4032.0 1152.0  0.0   1127.2 546048.0 228879.1 4233408.0  3880211.0  70848.0 70531.1 134887 3342.336  216  1091.770 4434.107

启动了12天,花1小时多一点进行gc,总数上还可以.


Tim Yang blog上的文章比较简洁:http://timyang.net/tag/gc/

Java Performance Tuning笔记,布布扣,bubuko.com


推荐阅读
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • 气象对比分析
    本文探讨了不同地区和时间段的天气模式,通过详细的图表和数据分析,揭示了气候变化的趋势及其对环境和社会的影响。 ... [详细]
  • 探讨 HDU 1536 题目,即 S-Nim 游戏的博弈策略。通过 SG 函数分析游戏胜负的关键,并介绍如何编程实现解决方案。 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 本文详细介绍如何在 iOS 7 环境下申请苹果开发者账号,涵盖从访问开发者网站到最终激活账号的完整流程。包括选择个人或企业账号类型、付款方式及注意事项等。 ... [详细]
  • 本文介绍了如何通过Java代码计算一个整数的位数,并展示了多个基础编程示例,包括求和、平均分计算、条件判断等。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本篇文章介绍如何将两个分别表示整数的链表进行相加,并生成一个新的链表。每个链表节点包含0到9的数值,如9-3-7和6-3相加得到1-0-0-0。通过反向处理链表、逐位相加并处理进位,最终再将结果链表反向,即可完成计算。 ... [详细]
  • Linux中的yum安装软件
    yum俗称大黄狗作用:解决安装软件包的依赖关系当安装依赖关系的软件包时,会将依赖的软件包一起安装。本地yum:需要yum源,光驱挂载。yum源:(刚开始查看yum源中的内容就是上图 ... [详细]
  • 鼠标悬停出现提示信息怎么做
    概述–提示:指启示,提起注意或给予提醒和解释。在excel中会经常用到给某个格子增加提醒信息,比如金额提示输入数值或最大长度值等等。设置方式也有多种,简单的,仅为单元格插入批注就可 ... [详细]
author-avatar
不会遗忘528_757
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有