在本节,让我们来看一看Java垃圾回收的监控与分析。然后,使用一个工具,监控一个示例应用的垃圾回收过程。如果你是个新手,最好看一下本系列的前三篇文章。你可以从“Java垃圾回收入门”开始看。
Java垃圾回收的监控和分析工具
下面是几个可用的工具。每一个可用的工具都有自己的优点和不足。使用恰当的工具,以正确的方式开展分析,可以帮助我们提高应用的性能。在本文,我们主要使用Java VisualVM。
- Java VisualVM
- Naarad
- GCViewer
- IBM Pattern Modeling and Analysis Tool for Java Garbage Collector
- HPjmeter
- IBM Monitoring and Diagnostic Tools for Java – Garbage Collection and Memory
- Visualizer
- Verbose GC Analyzer 阅读全文…
本节我们将介绍几种可用的Java垃圾收集器。垃圾回收是一个自动进程,它把开发人员从内存的分配与回收的杂务中解放出来。本文是“Java垃圾回收系列”的第三篇。在上一篇,也就是第二篇中,我们了解了Java垃圾回收的工作原理,这节非常有意思,我推荐你看一看。在第一篇“Java垃圾回收入门”中,我们介绍了Java虚拟机架构,堆内存模型以及Java相关的一些术语。
Java有四种垃圾收集器:
- Serial Garbage Collector
- Parallel Garbage Collector
- CMS Garbage Collector
- G1 Garbage Collector
D瓜哥注
这是四种类型的垃圾收集器。具体到每一个实现,在Oracle提供的官方JDK中就有Serial Garbage Collector、ParNew Garbage Collector、Parallel Scavenge Garbage Collector、Serial Old Garbage Collector、Parallel Old Garbage Collector、CMS Garbage Collector、G1 Garbage Collector等七种垃圾收集器。以后有机会再专门写文章做详细介绍!
这四种垃圾收集器每一种都有自己的优点与不足。最重要的是, 阅读全文…
本文将介绍Java垃圾回收的基础知识,同时将说明它的工作原理。同时,本文还是“Java垃圾回收系列”的第二篇文章。希望您已经阅读过该系列的第一篇文章,“Java垃圾回收入门”。
Java垃圾回收是一个自动管理程序所用内存的进程。通过将内存的分配与回收交给Java虚拟机来自动完成,就可以将开发人员从这些繁琐易错的工作中解放出来。
垃圾回收的启动
作为一个自动化的进程,开发人员不需要在代码中显式地启动垃圾回收进程。System.gc()
和Runtime.gc()
是申请垃圾收集器启动垃圾回收的勾子(hook)。
开发人员通过这种请求机制就有机会来请求启动垃圾回收,但是是否启动则由Java虚拟机自己决定。垃圾收集器可以选择拒绝这个请求,所以不保证请求到来之后就肯定进行垃圾回收。是否进行垃圾回收主要是根据堆内存中Eden内存的利用情况。Java虚拟机规范将这个选择权交给了实现,所以更详细的信息还要看具体的实现细节。
现在,我们知道了, 阅读全文…
看到substring()
,D瓜哥就想起来去年面试的惨痛精力。连续两次被问到substring()
会造成什么问题;第一次被问到时,确实不知道会造成什么问题,面试结束后就查了查资料。但是,没有认真看。没想到接下来的面试又问到,由于没有看,还是没回答上来,结果面试就惨遭失败!
没想到,这次又遇到了substring()
。所以,这篇文章D瓜哥必须好好翻译!
substring()
会造成什么问题,请看参考资料。
另外,需要提前说明一点,本节内容是针对Oracle JDK来说明的,其他JDK的实现也许可能不同。请读者自己查看相关文档以及源代码。
substring(int beginIndex, int endIndex)
方法,在JDK6和JDK7中的实现是不一样的。了解实现的不同之处,可以帮助我们更好地使用这个方法。为了简单起见, 阅读全文…
Java语言中,把异常分为两类:
- 受检异常: 这类异常必须在
throws
子句中被显式抛出或者在方法内被捕获。例如,IOException
异常或ClassNotFoundException
异常。
- 非受检异常: 这类异常不需要显式抛出或捕获。例如,
NumberFormatException
异常。
当一个受检异常在Thread
对象的run()
方法中被抛出时,我们必须捕获并处理它,因为run()
方法不能抛出异常。而一个非受检异常在Thread
对象的run()
方法中被抛出时,默认的行为是在控制台打印出堆栈跟踪信息然后退出程序。
幸运的是,Java为我们提供了一种机制, 阅读全文…
Java有一种特殊线程,守护线程,这种线程优先级特别低,只有在同一程序中的其他线程不执行时才会执行。
由于守护线程拥有这些特性,所以,一般用为为程序中的普通线程(也称为用户线程)提供服务。它们一般会有一个无限循环,或用于等待请求服务,或用于执行任务等。它们不可以做任何重要的工作,因为我们不确定他们什么时才能分配到CPU运行时间,而且当没有其他线程执行时,它们就会自动终止。这类线程的一个典型应用就是Java的垃圾回收。
在本节示例中,我们将创建 阅读全文…
临下班时,在CodeProject上看到了这篇文章的英文版,觉得不错。然后,晚上就加把劲把它翻译出来。初次翻译,水平有限,难免出错,敬请指正。
介绍
我发现,jQuery真是一个伟大的框架,它可以非常容易而轻松地扩展了我们可以做的客户端代码程序。在这篇文章中,我将重点介绍一些使用jQuery的技巧,给你开一个高效使用jQuery框架的好头。即使你已经对jQuery比较熟悉,但是其中的一些技巧依然可以帮助你更有效而恰当地使用jQuery。
第一条:使用最新版的jQuery
jQuery库的每个稳定发布版都会引入性能优化,同时 阅读全文…
使用Wordpress,尤其从3.0走入Wordpress世界的朋友,也许都遇到过一个问题:自动保存(Auto-Save)和文章修订(Post-Revisioning)功能导致文章ID不连续的问题。有时还特别夸张。例如,我的“‘地瓜哥’博客网”,第一篇文章是1,第二篇文章已经一下子跳到了19。这样对于像D瓜哥这样的“ID洁癖”的人来说,实在很不爽!经过D瓜哥的多次尝试后,终于很彻底地解决了这个问题。并且,还可以把以前被自动备份的ID重新利用起来!
去掉自动草稿的功能
造成发布文章ID不连续的原因有三:
- 自动保存功能 Auto-Save;
- 历史版本 Post Revisions;
- 自动草稿功能 Auto-Draft!
针对WordPress 3.4.x, 阅读全文…
昨晚(2013年3月8日)无意间发现“‘地瓜哥’博客网”使用的SyntaxHighlighter插件所引用的JavaScript文件竟然没有压缩。这对于追求网站加载的我来说,是不能容忍的!早在“高性能网站的十四条黄金法则”中,D瓜哥就已经介绍了提高网站加载速度的指导方法。正好周末无事,干脆就把“‘地瓜哥’博客网”优化一下。著小文一篇以记之!
压缩JavaScipt和CSS
JavaScript压缩代码的重要性不言而喻,如今的压缩工具也有不少,例如YUI Compressor, 阅读全文…
分类: Linux, Web开发, 挨踢(IT) 标签: Bash, JavaScript, PHP, Web, wordpress, 优化, 博客, 性能, 源码分析