﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-JavaZone-随笔分类-JavaSE</title><link>http://www.blogjava.net/MrZhujia/category/43095.html</link><description>追寻科技前沿</description><language>zh-cn</language><lastBuildDate>Sat, 17 Jul 2010 16:34:28 GMT</lastBuildDate><pubDate>Sat, 17 Jul 2010 16:34:28 GMT</pubDate><ttl>60</ttl><item><title>OpenJDK的完美中文显示</title><link>http://www.blogjava.net/MrZhujia/archive/2010/07/11/325816.html</link><dc:creator>祝嘉</dc:creator><author>祝嘉</author><pubDate>Sun, 11 Jul 2010 15:51:00 GMT</pubDate><guid>http://www.blogjava.net/MrZhujia/archive/2010/07/11/325816.html</guid><wfw:comment>http://www.blogjava.net/MrZhujia/comments/325816.html</wfw:comment><comments>http://www.blogjava.net/MrZhujia/archive/2010/07/11/325816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/MrZhujia/comments/commentRss/325816.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/MrZhujia/services/trackbacks/325816.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on'&nbsp;&nbsp;<a href='http://www.blogjava.net/MrZhujia/archive/2010/07/11/325816.html'>阅读全文</a><img src ="http://www.blogjava.net/MrZhujia/aggbug/325816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/MrZhujia/" target="_blank">祝嘉</a> 2010-07-11 23:51 <a href="http://www.blogjava.net/MrZhujia/archive/2010/07/11/325816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下java GUI中文字体显示问题</title><link>http://www.blogjava.net/MrZhujia/archive/2010/07/10/325712.html</link><dc:creator>祝嘉</dc:creator><author>祝嘉</author><pubDate>Sat, 10 Jul 2010 01:35:00 GMT</pubDate><guid>http://www.blogjava.net/MrZhujia/archive/2010/07/10/325712.html</guid><wfw:comment>http://www.blogjava.net/MrZhujia/comments/325712.html</wfw:comment><comments>http://www.blogjava.net/MrZhujia/archive/2010/07/10/325712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/MrZhujia/comments/commentRss/325712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/MrZhujia/services/trackbacks/325712.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ubuntu下的java中文字体文件名为uming.ttc，而不是通用的uming.ttf，解决方法就是为uming.ttc建一个软链接。<br>$cd /usr/share/fonts/truetype/arphic/<br>$sudo ln -s uming.ttc uming.ttf&nbsp;&nbsp;<a href='http://www.blogjava.net/MrZhujia/archive/2010/07/10/325712.html'>阅读全文</a><img src ="http://www.blogjava.net/MrZhujia/aggbug/325712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/MrZhujia/" target="_blank">祝嘉</a> 2010-07-10 09:35 <a href="http://www.blogjava.net/MrZhujia/archive/2010/07/10/325712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache Log4j 学习笔记</title><link>http://www.blogjava.net/MrZhujia/archive/2010/05/15/321033.html</link><dc:creator>祝嘉</dc:creator><author>祝嘉</author><pubDate>Sat, 15 May 2010 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/MrZhujia/archive/2010/05/15/321033.html</guid><wfw:comment>http://www.blogjava.net/MrZhujia/comments/321033.html</wfw:comment><comments>http://www.blogjava.net/MrZhujia/archive/2010/05/15/321033.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/MrZhujia/comments/commentRss/321033.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/MrZhujia/services/trackbacks/321033.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ApacheLogging Project Homepage: http://logging.apache.orgLog4j的类图&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         Logger    - 日志写出器，供程序员输出日志信息                        Appender  ...&nbsp;&nbsp;<a href='http://www.blogjava.net/MrZhujia/archive/2010/05/15/321033.html'>阅读全文</a><img src ="http://www.blogjava.net/MrZhujia/aggbug/321033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/MrZhujia/" target="_blank">祝嘉</a> 2010-05-15 13:19 <a href="http://www.blogjava.net/MrZhujia/archive/2010/05/15/321033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How to write clone method</title><link>http://www.blogjava.net/MrZhujia/archive/2010/04/21/318938.html</link><dc:creator>祝嘉</dc:creator><author>祝嘉</author><pubDate>Wed, 21 Apr 2010 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/MrZhujia/archive/2010/04/21/318938.html</guid><wfw:comment>http://www.blogjava.net/MrZhujia/comments/318938.html</wfw:comment><comments>http://www.blogjava.net/MrZhujia/archive/2010/04/21/318938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/MrZhujia/comments/commentRss/318938.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/MrZhujia/services/trackbacks/318938.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: the approach of writing clone method is:<br>1.Implements Cloneable interface<br>2.Override the clone method<br>    2.1 Make the clone method to public method<br>    2.2 Call super.clone() to produce the new object<br>    2.3 Clone members&nbsp;&nbsp;<a href='http://www.blogjava.net/MrZhujia/archive/2010/04/21/318938.html'>阅读全文</a><img src ="http://www.blogjava.net/MrZhujia/aggbug/318938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/MrZhujia/" target="_blank">祝嘉</a> 2010-04-21 10:51 <a href="http://www.blogjava.net/MrZhujia/archive/2010/04/21/318938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下JDK路径的配置</title><link>http://www.blogjava.net/MrZhujia/archive/2009/11/15/302393.html</link><dc:creator>祝嘉</dc:creator><author>祝嘉</author><pubDate>Sun, 15 Nov 2009 02:18:00 GMT</pubDate><guid>http://www.blogjava.net/MrZhujia/archive/2009/11/15/302393.html</guid><wfw:comment>http://www.blogjava.net/MrZhujia/comments/302393.html</wfw:comment><comments>http://www.blogjava.net/MrZhujia/archive/2009/11/15/302393.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/MrZhujia/comments/commentRss/302393.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/MrZhujia/services/trackbacks/302393.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/MrZhujia/archive/2009/11/15/302393.html'>阅读全文</a><img src ="http://www.blogjava.net/MrZhujia/aggbug/302393.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/MrZhujia/" target="_blank">祝嘉</a> 2009-11-15 10:18 <a href="http://www.blogjava.net/MrZhujia/archive/2009/11/15/302393.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JVM的垃圾回收机制详解和调优</title><link>http://www.blogjava.net/MrZhujia/archive/2009/10/09/297607.html</link><dc:creator>祝嘉</dc:creator><author>祝嘉</author><pubDate>Fri, 09 Oct 2009 14:52:00 GMT</pubDate><guid>http://www.blogjava.net/MrZhujia/archive/2009/10/09/297607.html</guid><wfw:comment>http://www.blogjava.net/MrZhujia/comments/297607.html</wfw:comment><comments>http://www.blogjava.net/MrZhujia/archive/2009/10/09/297607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/MrZhujia/comments/commentRss/297607.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/MrZhujia/services/trackbacks/297607.html</trackback:ping><description><![CDATA[<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="color: rgb(0, 176, 80); font-size: 10pt;"><span style="font-family: 宋体;">原文地址</span><span style="font-family: Verdana;">:<br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">http://www.matrix.org.cn/resource/article/43/43769_JVM_GC_PDM.html
</span></span></p>
<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="color: rgb(0, 176, 80);"><span style="font-size: 10pt;"><strong><span style="font-family: Verdana;">1.JVM</span><span style="font-family: 宋体;">的</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">概述</span></strong><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">即垃圾收集机制是指</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">用于释放那些不再使用的对象所占用的内存。</span><span style="font-family: Verdana;">java</span><span style="font-family: 宋体;">语言并不要求</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">有</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">，也没有规定</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">如何工作。不过常用的</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">都有</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">，而且大多数</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">都使用类似的算法管理内存和执行收集操作。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　在充分理解了垃圾收集算法和执行过程后，才能有效的优化它的性能。有些垃圾收集专用于特殊的应用程序。比如，实时应用程序主要是为了避免垃圾收集中断，而大多数</span><span style="font-family: Verdana;">OLTP</span><span style="font-family: 宋体;">应用程序则注重整体效率。理解了应用程序的工作负荷和</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">支持的垃圾收集算法，便可以进行优化配置垃圾收集器。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　垃圾收集的目的在于清除不再使用的对象。</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">通过确定对象是否被活动对象引用来确定是否收集该对象。</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。</span><span style="font-family: Verdana;"><br />
<br />
<strong>1.1.</strong></span><span style="font-family: 宋体;"><strong>引用计数</strong></span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　引用计数存储对特定对象的所有引用数，也就是说，当应用程序创建引用以及引用超出范围时，</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">必须适当增减引用数。当某对象的引用数为</span><span style="font-family: Verdana;">0</span><span style="font-family: 宋体;">时，便可以进行垃圾收集。</span><span style="font-family: Verdana;"><br />
<br />
<strong>1.2.</strong></span><strong><span style="font-family: 宋体;">对象引用遍历</span><span style="font-family: Verdana;"><br />
</span></strong><span style="font-family: 宋体;">　　早期的</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">使用引用计数，现在大多数</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">采用对象引用遍历。对象引用遍历从一组对象开始，沿着整个对象图上的每条链接，递归确定可到达（</span><span style="font-family: Verdana;">reachable</span><span style="font-family: 宋体;">）的对象。如果某对象不能从这些根对象的一个（至少一个）到达，则将它作为垃圾收集。在对象遍历阶段，</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">必须记住哪些对象可以到达，以便删除不可到达的对象，这称为标记（</span><span style="font-family: Verdana;">marking</span><span style="font-family: 宋体;">）对象。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　下一步，</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">要删除不可到达的对象。删除时，有些</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">只是简单的扫描堆栈，删除未标记的对象，并释放它们的内存以生成新的对象，这叫做清除（</span><span style="font-family: Verdana;">sweeping</span><span style="font-family: 宋体;">）。这种方法的问题在于内存会分成好多小段，而它们不足以用于新的对象，但是组合起来却很大。因此，许多</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">可以重新组织内存中的对象，并进行压缩（</span><span style="font-family: Verdana;">compact</span><span style="font-family: 宋体;">），形成可利用的空间。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　为此，</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">需要停止其他的活动。这种方法意味着所有与应用程序相关的工作停止，只有</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">运行。结果，在响应期间增减了许多混杂请求。另外，更复杂的</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">不断增加或同时运行以减少或者清除应用程序的中断。有的</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">使用单线程完成这项工作，有的则采用多线程以增加效率。</span></span><span style="font-family: Verdana;"><span style="font-size: 10pt;"><br />
</span>
</span></span></p>
<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="color: rgb(0, 176, 80);"><span style="font-size: 10pt;"><span style="font-family: Verdana;"><br />
<strong>2.</strong></span><span style="font-family: 宋体;"><strong>几种垃圾回收机制</strong></span><span style="font-family: Verdana;"><strong><br />
</strong><br />
<strong>2.1.</strong></span><span style="font-family: 宋体;"><strong>标记－清除收集器</strong></span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　这种收集器首先遍历对象图并标记可到达的对象，然后扫描堆栈以寻找未标记对象并释放它们的内存。这种收集器一般使用单线程工作并停止其他操作。</span><span style="font-family: Verdana;"><br />
<br />
<strong>2.2.</strong></span><span style="font-family: 宋体;"><strong>标记－压缩收集器</strong></span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　有时也叫标记－清除－压缩收集器，与标记－清除收集器有相同的标记阶段。在第二阶段，则把标记对象复制到堆栈的新域中以便压缩堆栈。这种收集器也停止其他操作。</span><span style="font-family: Verdana;"><br />
<br />
<strong>2.3.</strong></span><strong><span style="font-family: 宋体;">复制收集器</span><span style="font-family: Verdana;"><br />
</span></strong><span style="font-family: 宋体;">　　这种收集器将堆栈分为两个域，常称为半空间。每次仅使用一半的空间，</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">生成的新对象则放在另一半空间中。</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">运行时，它把可到达对象复制到另一半空间，从而压缩了堆栈。这种方法适用于短生存期的对象，持续复制长生存期的对象则导致效率降低。</span><span style="font-family: Verdana;"><br />
<br />
<strong>2.4.</strong></span><span style="font-family: 宋体;"><strong>增量收集器</strong></span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　增量收集器把堆栈分为多个域，每次仅从一个域收集垃圾。这会造成较小的应用程序中断。</span><span style="font-family: Verdana;"><br />
<br />
<strong>2.5.</strong></span><span style="font-family: 宋体;"><strong>分代收集器</strong></span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　这种收集器把堆栈分为两个或多个域，用以存放不同寿命的对象。</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">生成的新对象一般放在其中的某个域中。过一段时间，继续存在的对象将获得使用期并转入更长寿命的域中。分代收集器对不同的域使用不同的算法以优化性能。</span><span style="font-family: Verdana;"><br />
<br />
<strong>2.6.</strong></span><span style="font-family: 宋体;"><strong>并发收集器</strong></span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　并发收集器与应用程序同时运行。这些收集器在某点上（比如压缩时）一般都不得不停止其他操作以完成特定的任务，但是因为其他应用程序可进行其他的后台操作，所以中断其他处理的实际时间大大降低。</span><span style="font-family: Verdana;"><br />
<br />
<strong>2.7.</strong></span><span style="font-family: 宋体;"><strong>并行收集器</strong></span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　并行收集器使用某种传统的算法并使用多线程并行的执行它们的工作。在多</span><span style="font-family: Verdana;">cpu</span><span style="font-family: 宋体;">机器上使用多线程技术可以显著的提高</span><span style="font-family: Verdana;">java</span><span style="font-family: 宋体;">应用程序的可扩展性。</span></span><span style="font-family: Verdana;"><span style="font-size: 10pt;"><br />
</span>
</span></span></p>
<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="color: rgb(0, 176, 80); font-size: 10pt;"><span style="font-family: Verdana;"><br />
<strong>3.Sun HotSpot 1.4.1 JVM</strong></span><span style="font-family: 宋体;"><strong>堆大小的调整</strong></span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">Sun HotSpot 1.4.1</span><span style="font-family: 宋体;">使用分代收集器，它把堆分为三个主要的域：新域、旧域以及永久域。</span><span style="font-family: Verdana;">Jvm</span><span style="font-family: 宋体;">生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后，便获得使用期并进入旧域。在永久域中</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">则存储</span><span style="font-family: Verdana;">class</span><span style="font-family: 宋体;">和</span><span style="font-family: Verdana;">method</span><span style="font-family: 宋体;">对象。就配置而言，永久域是一个独立域并且不认为是堆的一部分。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　下面介绍如何控制这些域的大小。可使用</span><span style="font-family: Verdana;">-Xms</span><span style="font-family: 宋体;">和</span><span style="font-family: Verdana;">-Xmx </span><span style="font-family: 宋体;">控制整个堆的原始大小或最大值。</span><span style="font-family: Verdana;">
</span></span></p>
<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="color: rgb(0, 176, 80); font-size: 10pt;"><span style="font-family: 宋体;">下面的命令是把初始大小设置为</span><span style="font-family: Verdana;">128M</span><span style="font-family: 宋体;">：</span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">java &#8211;Xms128m <br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">&#8211;Xmx256m</span><span style="font-family: 宋体;">为控制新域的大小，可使用</span><span style="font-family: Verdana;">-XX:NewRatio</span><span style="font-family: 宋体;">设置新域在堆中所占的比例。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　下面的命令把整个堆设置成</span><span style="font-family: Verdana;">128m</span><span style="font-family: 宋体;">，新域比率设置成</span><span style="font-family: Verdana;">3</span><span style="font-family: 宋体;">，即新域与旧域比例为</span><span style="font-family: Verdana;">1</span><span style="font-family: 宋体;">：</span><span style="font-family: Verdana;">3</span><span style="font-family: 宋体;">，新域为堆的</span><span style="font-family: Verdana;">1/4</span><span style="font-family: 宋体;">或</span><span style="font-family: Verdana;">32M</span><span style="font-family: 宋体;">：</span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">java &#8211;Xms128m &#8211;Xmx128m <br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">&#8211;XX:NewRatio =3</span><span style="font-family: 宋体;">可使用</span><span style="font-family: Verdana;">-XX:NewSize</span><span style="font-family: 宋体;">和</span><span style="font-family: Verdana;">-XX:MaxNewsize</span><span style="font-family: 宋体;">设置新域的初始值和最大值。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　下面的命令把新域的初始值和最大值设置成</span><span style="font-family: Verdana;">64m: <br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">java &#8211;Xms256m &#8211;Xmx256m &#8211;Xmn64m<br />
</span><span style="font-family: 宋体;">　　永久域默认大小为</span><span style="font-family: Verdana;">4m</span><span style="font-family: 宋体;">。运行程序时，</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">会调整永久域的大小以满足需要。每次调整时，</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">会对堆进行一次完全的垃圾收集。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　使用</span><span style="font-family: Verdana;">-XX:MaxPerSize</span><span style="font-family: 宋体;">标志来增加永久域搭大小。在</span><span style="font-family: Verdana;">WebLogic Server</span><span style="font-family: 宋体;">应用程序加载较多类时，经常需要增加永久域的最大值。当</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">加载类时，永久域中的对象急剧增加，从而使</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">不断调整永久域大小。为了避免调整，可使用</span><span style="font-family: Verdana;">-XX:PerSize</span><span style="font-family: 宋体;">标志设置初始值。</span><span style="font-family: Verdana;">
</span></span></p>
<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="color: rgb(0, 176, 80);"><span style="font-size: 10pt;"><span style="font-family: 宋体;">下面把永久域初始值设置成</span><span style="font-family: Verdana;">32m</span><span style="font-family: 宋体;">，最大值设置成</span><span style="font-family: Verdana;">64m</span><span style="font-family: 宋体;">。</span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">java -Xms512m -Xmx512m -Xmn128m -XX:PermSize=32m -XX:MaxPermSize=64m<br />
<br />
</span><span style="font-family: 宋体;">　　默认状态下，</span><span style="font-family: Verdana;">HotSpot</span><span style="font-family: 宋体;">在新域中使用复制收集器。该域一般分为三个部分。第一部分为</span><span style="font-family: Verdana;">Eden</span><span style="font-family: 宋体;">，用于生成新的对象。另两部分称为救助空间，当</span><span style="font-family: Verdana;">Eden</span><span style="font-family: 宋体;">充满时，收集器停止应用程序，把所有可到达对象复制到当前的</span><span style="font-family: Verdana;">from</span><span style="font-family: 宋体;">救助空间，一旦当前的</span><span style="font-family: Verdana;">from</span><span style="font-family: 宋体;">救助空间充满，收集器则把可到达对象复制到当前的</span><span style="font-family: Verdana;">to</span><span style="font-family: 宋体;">救助空间。</span><span style="font-family: Verdana;">From</span><span style="font-family: 宋体;">和</span><span style="font-family: Verdana;">to</span><span style="font-family: 宋体;">救助空间互换角色。维持活动的对象将在救助空间不断复制，直到它们获得使用期并转入旧域。使用</span><span style="font-family: Verdana;">-XX:SurvivorRatio</span><span style="font-family: 宋体;">可控制新域子空间的大小。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　同</span><span style="font-family: Verdana;">NewRation</span><span style="font-family: 宋体;">一样，</span><span style="font-family: Verdana;">SurvivorRation</span><span style="font-family: 宋体;">规定某救助域与</span><span style="font-family: Verdana;">Eden</span><span style="font-family: 宋体;">空间的比值。比如，以下命令把新域设置成</span><span style="font-family: Verdana;">64m</span><span style="font-family: 宋体;">，</span><span style="font-family: Verdana;">Eden</span><span style="font-family: 宋体;">占</span><span style="font-family: Verdana;">32m</span><span style="font-family: 宋体;">，每个救助域各占</span><span style="font-family: Verdana;">16m</span><span style="font-family: 宋体;">：</span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　</span></span><span style="font-family: Verdana;"><span style="font-size: 10pt;">java -Xms256m -Xmx256m -Xmn64m -XX:SurvivorRation =2</span>
</span></span></p>
<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">
&nbsp;</p>
<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="color: rgb(0, 176, 80);"><span style="font-size: 10pt;"><span style="font-family: 宋体;">如前所述，默认状态下</span><span style="font-family: Verdana;">HotSpot</span><span style="font-family: 宋体;">对新域使用复制收集器，对旧域使用标记－清除－压缩收集器。在新域中使用复制收集器有很多意义，因为应用程序生成的大部分对象是短寿命的。理想状态下，所有过渡对象在移出</span><span style="font-family: Verdana;">Eden</span><span style="font-family: 宋体;">空间时将被收集。如果能够这样的话，并且移出</span><span style="font-family: Verdana;">Eden</span><span style="font-family: 宋体;">空间的对象是长寿命的，那么理论上可以立即把它们移进旧域，避免在救助空间反复复制。但是，应用程序不能适合这种理想状态，因为它们有一小部分中长寿命的对象。最好是保持这些中长寿命的对象并放在新域中，因为复制小部分的对象总比压缩旧域廉价。为控制新域中对象的复制，可用</span><span style="font-family: Verdana;">-XX:TargetSurvivorRatio</span><span style="font-family: 宋体;">控制救助空间的比例（该值是设置救助空间的使用比例。如救助空间位</span><span style="font-family: Verdana;">1M</span><span style="font-family: 宋体;">，该值</span><span style="font-family: Verdana;">50</span><span style="font-family: 宋体;">表示可用</span><span style="font-family: Verdana;">500K</span><span style="font-family: 宋体;">）。该值是一个百分比，默认值是</span><span style="font-family: Verdana;">50</span><span style="font-family: 宋体;">。当较大的堆栈使用较低的</span><span style="font-family: Verdana;">sruvivorratio</span><span style="font-family: 宋体;">时，应增加该值到</span><span style="font-family: Verdana;">80</span><span style="font-family: 宋体;">至</span><span style="font-family: Verdana;">90</span><span style="font-family: 宋体;">，以更好利用救助空间。用</span><span style="font-family: Verdana;">-XX:maxtenuring threshold</span><span style="font-family: 宋体;">可控制上限。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　为放置所有的复制全部发生以及希望对象从</span><span style="font-family: Verdana;">eden</span><span style="font-family: 宋体;">扩展到旧域，可以把</span><span style="font-family: Verdana;">MaxTenuring Threshold</span><span style="font-family: 宋体;">设置成</span><span style="font-family: Verdana;">0</span><span style="font-family: 宋体;">。设置完成后，实际上就不再使用救助空间了，因此应把</span><span style="font-family: Verdana;">SurvivorRatio</span><span style="font-family: 宋体;">设成最大值以最大化</span><span style="font-family: Verdana;">Eden</span><span style="font-family: 宋体;">空间，设置如下：</span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">java &#8230; -XX:MaxTenuringThreshold=0 &#8211;XX:SurvivorRatio</span><span style="font-family: 宋体;">＝</span></span><span style="font-family: Verdana;"><span style="font-size: 10pt;">50000 &#8230;<br />
</span>
</span></span></p>
<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="color: rgb(0, 176, 80); font-size: 10pt;"><span style="font-family: Verdana;"><br />
<strong>4.BEA JRockit JVM</strong></span><span style="font-family: 宋体;"><strong>的使用</strong></span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">Bea WebLogic 8.1</span><span style="font-family: 宋体;">使用的新的</span><span style="font-family: Verdana;">JVM</span><span style="font-family: 宋体;">用于</span><span style="font-family: Verdana;">Intel</span><span style="font-family: 宋体;">平台。在</span><span style="font-family: Verdana;">Bea</span><span style="font-family: 宋体;">安装完毕的目录下可以看到有一个类似于</span><span style="font-family: Verdana;">jrockit81sp1_141_03</span><span style="font-family: 宋体;">的文件夹。这就是</span><span style="font-family: Verdana;">Bea</span><span style="font-family: 宋体;">新</span><span style="font-family: Verdana;">JVM</span><span style="font-family: 宋体;">所在目录。不同于</span><span style="font-family: Verdana;">HotSpot</span><span style="font-family: 宋体;">把</span><span style="font-family: Verdana;">Java</span><span style="font-family: 宋体;">字节码编译成本地码，它预先编译成类。</span><span style="font-family: Verdana;">JRockit</span><span style="font-family: 宋体;">还提供了更细致的功能用以观察</span><span style="font-family: Verdana;">JVM</span><span style="font-family: 宋体;">的运行状态，主要是独立的</span><span style="font-family: Verdana;">GUI</span><span style="font-family: 宋体;">控制台（只能适用于使用</span><span style="font-family: Verdana;">Jrockit</span><span style="font-family: 宋体;">才能使用</span><span style="font-family: Verdana;">jrockit81sp1_141_03</span><span style="font-family: 宋体;">自带的</span><span style="font-family: Verdana;">console</span><span style="font-family: 宋体;">监控一些</span><span style="font-family: Verdana;">cpu</span><span style="font-family: 宋体;">及</span><span style="font-family: Verdana;">memory</span><span style="font-family: 宋体;">参数）或者</span><span style="font-family: Verdana;">WebLogic Server</span><span style="font-family: 宋体;">控制台。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">Bea JRockit JVM</span><span style="font-family: 宋体;">支持</span><span style="font-family: Verdana;">4</span><span style="font-family: 宋体;">种垃圾收集器：</span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　</span><strong><span style="font-family: Verdana;">4.1.1.</span><span style="font-family: 宋体;">分代复制收集器</span></strong><span style="font-family: Verdana;">
<br />
</span><span style="font-family: 宋体;">　　它与默认的分代收集器工作策略类似。对象在新域中分配，即</span><span style="font-family: Verdana;">JRockit</span><span style="font-family: 宋体;">文档中的</span><span style="font-family: Verdana;">nursery</span><span style="font-family: 宋体;">。这种收集器最适合单</span><span style="font-family: Verdana;">cpu</span><span style="font-family: 宋体;">机上小型堆操作。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　</span><strong><span style="font-family: Verdana;">4.1.2.</span><span style="font-family: 宋体;">单空间并发收集器</span></strong><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　该收集器使用完整堆，并与背景线程共同工作。尽管这种收集器可以消除中断，但是收集器需花费较长的时间寻找死对象，而且处理应用程序时收集器经常运行。如果处理器不能应付应用程序产生的垃圾，它会中断应用程序并关闭收集。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　分代并发收集器</span><span style="font-family: Verdana;">
</span><span style="font-family: 宋体;">这种收集器在护理域使用排它复制收集器，在旧域中则使用并发收集器。由于它比单空间共同发生收集器中断频繁，因此它需要较少的内存，应用程序的运行效率也较高，注意，过小的护理域可以导致大量的临时对象被扩展到旧域中。这会造成收集器超负荷运作，甚至采用排它性工作方式完成收集。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　</span><strong><span style="font-family: Verdana;">4.1.3.</span><span style="font-family: 宋体;">并行收集器</span></strong><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　该收集器也停止其他进程的工作，但使用多线程以加速收集进程。尽管它比其他的收集器易于引起长时间的中断，但一般能更好的利用内存，程序效率也较高。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　默认状态下，</span><span style="font-family: Verdana;">JRockit</span><span style="font-family: 宋体;">使用分代并发收集器。要改变收集器，可使用</span><span style="font-family: Verdana;">-Xgc:</span><span style="font-family: 宋体;">，对应四个收集器分别为</span><span style="font-family: Verdana;">gencopy</span><span style="font-family: 宋体;">，</span><span style="font-family: Verdana;">singlecon</span><span style="font-family: 宋体;">，</span><span style="font-family: Verdana;">gencon</span><span style="font-family: 宋体;">以及</span><span style="font-family: Verdana;">parallel</span><span style="font-family: 宋体;">。可使用</span><span style="font-family: Verdana;">-Xms</span><span style="font-family: 宋体;">和</span><span style="font-family: Verdana;">-Xmx</span><span style="font-family: 宋体;">设置堆的初始大小和最大值。要设置护理域，则使用</span><span style="font-family: Verdana;">-Xns:java &#8211;jrockit &#8211;Xms512m &#8211;Xmx512m &#8211;Xgc:gencon &#8211;Xns128m&#8230;</span><span style="font-family: 宋体;">尽管</span><span style="font-family: Verdana;">JRockit</span><span style="font-family: 宋体;">支持</span><span style="font-family: Verdana;">-verbose:gc</span><span style="font-family: 宋体;">开关，但它输出的信息会因收集器的不同而异。</span><span style="font-family: Verdana;">JRockit</span><span style="font-family: 宋体;">还支持</span><span style="font-family: Verdana;">memory</span><span style="font-family: 宋体;">、</span><span style="font-family: Verdana;">load</span><span style="font-family: 宋体;">和</span><span style="font-family: Verdana;">codegen</span><span style="font-family: 宋体;">的输出。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　注意</span><span style="font-family: Verdana;">
</span><span style="font-family: 宋体;">：如果</span><span style="font-family: Verdana;">
</span><span style="font-family: 宋体;">使用</span><span style="font-family: Verdana;">JRockit JVM</span><span style="font-family: 宋体;">的话还可以使用</span><span style="font-family: Verdana;">WLS</span><span style="font-family: 宋体;">自带的</span><span style="font-family: Verdana;">console</span><span style="font-family: 宋体;">（</span><span style="font-family: Verdana;">C:\bea\jrockit81sp1_141_03\bin</span><span style="font-family: 宋体;">下）来监控一些数据，如</span><span style="font-family: Verdana;">cpu</span><span style="font-family: 宋体;">，</span><span style="font-family: Verdana;">memery</span><span style="font-family: 宋体;">等。要想能构监控必须在启动服务时</span><span style="font-family: Verdana;">startWeblogic.cmd</span><span style="font-family: 宋体;">中加入－</span><span style="font-family: Verdana;">Xmanagement</span><span style="font-family: 宋体;">参数。</span><span style="font-family: Verdana;"><br />
</span></span></p>
<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="color: rgb(0, 176, 80);"><span style="font-size: 10pt;"><span style="font-family: Verdana;"><br />
<strong>5.</strong></span><strong><span style="font-family: 宋体;">如何从</span><span style="font-family: Verdana;">JVM</span><span style="font-family: 宋体;">中获取信息来进行调整</span></strong><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">-verbose.gc</span><span style="font-family: 宋体;">开关可显示</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">的操作内容。打开它，可以显示最忙和最空闲收集行为发生的时间、收集前后的内存大小、收集需要的时间等。打开</span><span style="font-family: Verdana;">-xx:+ printgcdetails</span><span style="font-family: 宋体;">开关，可以详细了解</span><span style="font-family: Verdana;">gc</span><span style="font-family: 宋体;">中的变化。打开</span><span style="font-family: Verdana;">-XX: + PrintGCTimeStamps</span><span style="font-family: 宋体;">开关，可以了解这些垃圾收集发生的时间，自</span><span style="font-family: Verdana;">jvm</span><span style="font-family: 宋体;">启动以后以秒计量。最后，通过</span><span style="font-family: Verdana;">-xx: + PrintHeapAtGC</span><span style="font-family: 宋体;">开关了解堆的更详细的信息。为了了解新域的情况，可以通过</span><span style="font-family: Verdana;">-XX:=PrintTenuringDistribution</span><span style="font-family: 宋体;">开关了解获得使用期的对象权。</span></span><span style="font-family: Verdana;"><span style="font-size: 10pt;"><br />
</span>
</span></span></p>
<p style="background: rgb(249, 252, 254) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="color: rgb(0, 176, 80); font-size: 10pt;"><span style="font-family: Verdana;"><br />
<strong>6.Pdm</strong></span><strong><span style="font-family: 宋体;">系统</span><span style="font-family: Verdana;">JVM</span><span style="font-family: 宋体;">调整</span></strong><span style="font-family: Verdana;"><strong><br />
</strong><br />
</span><span style="font-family: 宋体;">　　</span><strong><span style="font-family: Verdana;">6.1.</span><span style="font-family: 宋体;">服务器：前提内存</span><span style="font-family: Verdana;">1G </span><span style="font-family: 宋体;">单</span></strong><span style="font-family: Verdana;"><strong>CPU</strong><br />
<br />
</span><span style="font-family: 宋体;">　　可通过如下参数进行调整：－</span><span style="font-family: Verdana;">server </span><span style="font-family: 宋体;">启用服务器模式（如果</span><span style="font-family: Verdana;">CPU</span><span style="font-family: 宋体;">多，服务器机建议使用此项）</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">Xms,</span><span style="font-family: 宋体;">－</span><span style="font-family: Verdana;">Xmx</span><span style="font-family: 宋体;">一般设为同样大小。</span><span style="font-family: Verdana;"> 800m<br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">Xmn </span><span style="font-family: 宋体;">是将</span><span style="font-family: Verdana;">NewSize</span><span style="font-family: 宋体;">与</span><span style="font-family: Verdana;">MaxNewSize</span><span style="font-family: 宋体;">设为一致。</span><span style="font-family: Verdana;">320m<br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">XX:PerSize 64m<br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">XX:NewSize 320m </span><span style="font-family: 宋体;">此值设大可调大新对象区，减少</span><span style="font-family: Verdana;">Full GC</span><span style="font-family: 宋体;">次数</span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">XX:MaxNewSize 320m<br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">XX:NewRato NewSize</span><span style="font-family: 宋体;">设了可不设。</span><span style="font-family: Verdana;">4 <br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">XX: SurvivorRatio 4<br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">XX:userParNewGC </span><span style="font-family: 宋体;">可用来设置并行收集</span><span style="font-family: Verdana;">
<br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">XX:ParallelGCThreads </span><span style="font-family: 宋体;">可用来增加并行度</span><span style="font-family: Verdana;"> 4<br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">XXUseParallelGC </span><span style="font-family: 宋体;">设置后可以使用并行清除收集器</span><span style="font-family: Verdana;"><br />
</span><span style="font-family: 宋体;">　　－</span><span style="font-family: Verdana;">XX</span><span style="font-family: 宋体;">：</span><span style="font-family: Verdana;">UseAdaptiveSizePolicy </span><span style="font-family: 宋体;">与上面一个联合使用效果更好，利用它可以自动优化新域大小以及救助空间比值</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　</span><strong><span style="font-family: Verdana;">6.2.</span><span style="font-family: 宋体;">客户机：通过在</span><span style="font-family: Verdana;">JNLP</span><span style="font-family: 宋体;">文件中设置参数来调整客户端</span></strong><span style="font-family: Verdana;"><strong>JVM<br />
</strong><br />
</span><span style="font-family: 宋体;">　　</span><span style="font-family: Verdana;">JNLP</span><span style="font-family: 宋体;">中参数：</span><span style="font-family: Verdana;">initial-heap-size</span><span style="font-family: 宋体;">和</span><span style="font-family: Verdana;">max-heap-size<br />
<br />
</span><span style="font-family: 宋体;">　　这可以在</span><span style="font-family: Verdana;">framework</span><span style="font-family: 宋体;">的</span><span style="font-family: Verdana;">RequestManager</span><span style="font-family: 宋体;">中生成</span><span style="font-family: Verdana;">JNLP</span><span style="font-family: 宋体;">文件时加入上述参数，但是这些值是要求根据客户机的硬件状态变化的（如客户机的内存大小等）。建议这两个参数值设为客户机可用内存的</span><span style="font-family: Verdana;">60</span><span style="font-family: 宋体;">％（有待测试）。为了在动态生成</span><span style="font-family: Verdana;">JNLP</span><span style="font-family: 宋体;">时以上两个参数值能够随客户机不同而不同，可靠虑获得客户机系统信息并将这些嵌到首页</span><span style="font-family: Verdana;">index.jsp</span><span style="font-family: 宋体;">中作为连接请求的参数。</span><span style="font-family: Verdana;"><br />
<br />
</span><span style="font-family: 宋体;">　　在设置了上述参数后可以通过</span><span style="font-family: Verdana;">Visualgc </span><span style="font-family: 宋体;">来观察垃圾回收的一些参数状态，再做相应的调整来改善性能。一般的标准是减少</span><span style="font-family: Verdana;">fullgc</span><span style="font-family: 宋体;">的次数，最好硬件支持使用并行垃圾回收（要求多</span><span style="font-family: Verdana;">CPU</span><span style="font-family: 宋体;">）。</span><span style="font-family: Verdana;">
</span></span></p>
<img src ="http://www.blogjava.net/MrZhujia/aggbug/297607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/MrZhujia/" target="_blank">祝嘉</a> 2009-10-09 22:52 <a href="http://www.blogjava.net/MrZhujia/archive/2009/10/09/297607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>About serialVersionUID</title><link>http://www.blogjava.net/MrZhujia/archive/2009/10/07/297348.html</link><dc:creator>祝嘉</dc:creator><author>祝嘉</author><pubDate>Wed, 07 Oct 2009 02:13:00 GMT</pubDate><guid>http://www.blogjava.net/MrZhujia/archive/2009/10/07/297348.html</guid><wfw:comment>http://www.blogjava.net/MrZhujia/comments/297348.html</wfw:comment><comments>http://www.blogjava.net/MrZhujia/archive/2009/10/07/297348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/MrZhujia/comments/commentRss/297348.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/MrZhujia/services/trackbacks/297348.html</trackback:ping><description><![CDATA[<p><span style="font-size: 14pt; font-family: Verdana;">The serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization. If the receiver has loaded a class for the object that has a different serialVersionUID than that of the corresponding sender's class, then deserialization will result in an <code>InvalidClassException</code>. A serializable class can declare its own serialVersionUID explicitly by declaring a field named <code>"serialVersionUID"</code> that must be <span style="color: #0000ff;">static</span>, <span style="color: #0000ff;">final</span>, and of type <code style="color: #0000ff; font-family: Verdana;">long</code>:
<p>
</p>
<pre> ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;<br />
</pre>
<p>If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is <em>strongly recommended</em> that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected <code>InvalidClassException</code>s during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the <code>private</code> modifier where possible, since such declarations apply only to the immediately declaring class--serialVersionUID fields are not useful as inherited members. </p>
</span><br />
<br />
<br />
</p>
<p><span style="font-size: 14pt; font-family: 新宋体;">&nbsp;
<p>序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联，该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同，则反序列化将会导致 <code>InvalidClassException</code>。可序列化类可以通过声明名为 <code>"serialVersionUID"</code> 的字段（该字段必须是静态 (<span style="color: #0000ff;">static</span>)、最终 (<span style="color: #0000ff;">final</span>) 的 <code><span style="color: #0000ff;"><code>long</code> </span></code>型字段）显式声明其自己的 serialVersionUID：
</p>
<p>
</p>
<pre> ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;<br />
</pre>
<p>如果可序列化类未显式声明 serialVersionUID，则序列化运行时将基于该类的各个方面计算该类的默认 serialVersionUID 值，如&#8220;Java(TM) 对象序列化规范&#8221;中所述。不过，<em>强烈建议</em> 所有可序列化类都显式声明 serialVersionUID 值，原因是计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性，根据编译器实现的不同可能千差万别，这样在反序列化过程中可能会导致意外的 <code>InvalidClassException</code>。因此，为保证 serialVersionUID 值跨不同 java 编译器实现的一致性，序列化类必须声明一个明确的 serialVersionUID 值。还强烈建议使用 <code>private</code> 修饰符显示声明 serialVersionUID（如果可能），原因是这种声明仅应用于直接声明类 -- serialVersionUID 字段作为继承成员没有用处。数组类不能声明一个明确的 serialVersionUID，因此它们总是具有默认的计算值，但是数组类没有匹配 serialVersionUID 值的要求。 </p>
</span></p>
<img src ="http://www.blogjava.net/MrZhujia/aggbug/297348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/MrZhujia/" target="_blank">祝嘉</a> 2009-10-07 10:13 <a href="http://www.blogjava.net/MrZhujia/archive/2009/10/07/297348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较</title><link>http://www.blogjava.net/MrZhujia/archive/2009/10/06/297289.html</link><dc:creator>祝嘉</dc:creator><author>祝嘉</author><pubDate>Tue, 06 Oct 2009 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/MrZhujia/archive/2009/10/06/297289.html</guid><wfw:comment>http://www.blogjava.net/MrZhujia/comments/297289.html</wfw:comment><comments>http://www.blogjava.net/MrZhujia/archive/2009/10/06/297289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/MrZhujia/comments/commentRss/297289.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/MrZhujia/services/trackbacks/297289.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/MrZhujia/archive/2009/10/06/297289.html'>阅读全文</a><img src ="http://www.blogjava.net/MrZhujia/aggbug/297289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/MrZhujia/" target="_blank">祝嘉</a> 2009-10-06 09:31 <a href="http://www.blogjava.net/MrZhujia/archive/2009/10/06/297289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>