<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>夏小草</title>
    <link>http://www.dongliu.net/</link>
    <description>嘴角上扬微笑</description>
    <pubDate>Sat, 18 Feb 2012 07:38:07 GMT</pubDate>
    <dc:date>2012-02-18T07:38:07Z</dc:date>
    <item>
      <title>木婉清发布新版</title>
      <link>http://www.dongliu.net/post/504142</link>
      <description>&lt;p&gt;&#xD;
	木婉清是个水木社区的客户端，去年春节时写的，之后就放着没动了。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	今天春节又翻出来改吧改吧，看起来比之前好了那么一点。实现上界面改用html来写了， 规避了Android原生界面实现上的不少问题，但也出现了同样多的新问题&amp;hellip;&amp;hellip;&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	未完成的功能和BUG都还有很多，等到下个春节来修复吧。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	项目地址：&lt;a href="http://code.google.com/p/muwanqing/"&gt;http://code.google.com/p/muwanqing/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	下载：&lt;a href="http://muwanqing.googlecode.com/files/muwanqing.apk"&gt;http://muwanqing.googlecode.com/files/muwanqing.apk&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	&lt;img alt="" src="/blob/show/AMIfv96d7CPXBg24xz83_0C-4UO4eMXtSKw6btzQzjGxxLM1c_ta14haHgfNGVGYwGx_BJML10AXadCB5BThH7Z6D3RNanrHukrrFNerAJh-JKm7JyiOsZNvJK2GKA4K6O7K_-e7-fJj_xUJNLLC9swANRK9qg9Aeg" style="width: 150px; height: 150px; " /&gt;&lt;/p&gt;</description>
      <category>android</category>
      <pubDate>Fri, 27 Jan 2012 11:43:00 GMT</pubDate>
      <guid>http://www.dongliu.net/post/504142</guid>
      <dc:creator>dongliu84</dc:creator>
      <dc:date>2012-01-27T11:43:00Z</dc:date>
    </item>
    <item>
      <title>JVM的DirectMemory设置</title>
      <link>http://www.dongliu.net/post/504141</link>
      <description>&lt;p&gt;&#xD;
	几台服务器的JVM占用内存总是持续增长，大大超过-Xmx设定的值，服务器物理内存几乎被耗尽。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	使用jmap查看JVM的内存使用，发现jvm的堆大小完全在-Xmx参数设定的范围之内，那问题只能处在别的地方了。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	JVM除了堆内存之外，就只有栈内存和DirectMemory了。栈空间每个线程是固定的，线程数也没可能多到可以占用这么多内存的程序，所以怀疑的目标就在DirectMemory上了。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	DirectMemory是java nio引入的，直接以native的方式分配内存，不受jvm管理。这种方式是为了提高网络和文件IO的效率，避免多余的内存拷贝而出现的。DirectMemory占用的大小没有直接的工具或者API可以查看，不过这个在Bits类中是有两个字段存储了最大大小和已分配大小的，使用反射可以拿到这个数据：&lt;/p&gt;&#xD;
&lt;p style="margin-left: 40px; "&gt;&#xD;
	&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;Class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;lt;?&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;c&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;Class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;.&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(255, 0, 0); "&gt;forName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;(&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(0, 0, 255); "&gt;&amp;quot;java.nio.Bits&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;);&lt;/span&gt;&lt;br style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); " /&gt;&#xD;
	&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;Field&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;maxMemory&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;c&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;.&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(255, 0, 0); "&gt;getDeclaredField&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;(&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(0, 0, 255); "&gt;&amp;quot;maxMemory&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;);&lt;/span&gt;&lt;br style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); " /&gt;&#xD;
	&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;maxMemory&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;.&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(255, 0, 0); "&gt;setAccessible&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;(&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(0, 0, 128); font-weight: bold; "&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;);&lt;/span&gt;&lt;br style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); " /&gt;&#xD;
	&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;Field&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;reservedMemory&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;c&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;.&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(255, 0, 0); "&gt;getDeclaredField&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;(&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(0, 0, 255); "&gt;&amp;quot;reservedMemory&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;);&lt;/span&gt;&lt;br style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); " /&gt;&#xD;
	&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;reservedMemory&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;.&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(255, 0, 0); "&gt;setAccessible&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;(&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(0, 0, 128); font-weight: bold; "&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;);&lt;/span&gt;&lt;br style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); " /&gt;&#xD;
	&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;Long&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;maxMemoryValue&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;Long&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;maxMemory&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;.&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(255, 0, 0); "&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;(&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(0, 0, 128); font-weight: bold; "&gt;null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;);&lt;/span&gt;&lt;br style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); " /&gt;&#xD;
	&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;Long&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;reservedMemoryValue&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;Long&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;reservedMemory&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;.&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(255, 0, 0); "&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;(&lt;/span&gt;&lt;span style="font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); color: rgb(0, 0, 128); font-weight: bold; "&gt;null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: '[object HTMLOptionElement]', Consolas, 'Lucida Console', 'Courier New'; font-size: 14px; text-align: left; background-color: rgb(241, 254, 235); "&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	结果证实了猜测，DirectMemory增长失控了。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	原来，DirectMemory 的默认大小是64M，而JDK6之前和JDK6的某些版本的SUN JVM，存在一个BUG，在用-Xmx设定堆空间大小的时候，也设置了DirectMemory的大小。加入设置了-Xmx2048m，那么jvm最终可分配的内存大小为4G多一些，是预期的两倍。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	解决方式是设置jvm参数-XX:MaxDirectMemorySize=128m，指定DirectMemory的大小。&lt;/p&gt;</description>
      <category>java</category>
      <category>jvm</category>
      <pubDate>Thu, 05 Jan 2012 09:22:00 GMT</pubDate>
      <guid>http://www.dongliu.net/post/504141</guid>
      <dc:creator>dongliu84</dc:creator>
      <dc:date>2012-01-05T09:22:00Z</dc:date>
    </item>
    <item>
      <title>为Process.waitFor设置超时</title>
      <link>http://www.dongliu.net/post/496142</link>
      <description>&lt;p&gt;&#xD;
	Java中在使用Runtime.getRuntime().exec(command)调用系统命令后，一般会调用Process.waitFor()来等待命令执行结束，获取执行结果。今天一个悲剧的事实证明了，即使只是调用了很简单的脚本命令，在调用Process.waitFor()后同样可能发生无休止或者接近于无休止的阻塞。处理完故障之后痛定思痛，决定在代码中加入超时控制，但是Process.waitFor()本身并不支持超时时间设置。一个方法是改用非阻塞的Process.exitValue()方法，然后轮询检查进程状态，这种方式比较消耗CPU，以至于轮询间隔也不能设置得太小，总归不是很完美。另外就是多起一个线程，借助于其他的超时机制来控制。最后使用的代码如下：&lt;/p&gt;&#xD;
&lt;div class="source" style="font-family: &amp;quot;[object HTMLOptionElement]&amp;quot;,&amp;quot;Consolas&amp;quot;,&amp;quot;Lucida Console&amp;quot;,&amp;quot;Courier New&amp;quot;; color: rgb(0, 0, 0);"&gt;&#xD;
	&lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;ProcessUtils&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 136, 0); font-style: italic;"&gt;/**&lt;/span&gt;&lt;br /&gt;&#xD;
	&lt;span style="color: rgb(0, 136, 0); font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * 运行一个外部命令，返回状态.若超过指定的超时时间，抛出TimeoutException&lt;/span&gt;&lt;br /&gt;&#xD;
	&lt;span style="color: rgb(0, 136, 0); font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param command&lt;/span&gt;&lt;br /&gt;&#xD;
	&lt;span style="color: rgb(0, 136, 0); font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param timeout&lt;/span&gt;&lt;br /&gt;&#xD;
	&lt;span style="color: rgb(0, 136, 0); font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return&lt;/span&gt;&lt;br /&gt;&#xD;
	&lt;span style="color: rgb(0, 136, 0); font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @throws IOException&lt;/span&gt;&lt;br /&gt;&#xD;
	&lt;span style="color: rgb(0, 136, 0); font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @throws InterruptedException&lt;/span&gt;&lt;br /&gt;&#xD;
	&lt;span style="color: rgb(0, 136, 0); font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @throws TimeoutException&lt;/span&gt;&lt;br /&gt;&#xD;
	&lt;span style="color: rgb(0, 136, 0); font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;int&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;executeCommand&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;String&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;command&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;long&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;timeout&lt;/span&gt;) &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;throws&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;IOException&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;InterruptedException&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;TimeoutException&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;Process&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;process&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;Runtime&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;getRuntime&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;().&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;exec&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 0);"&gt;command&lt;/span&gt;);&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;Worker&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;worker&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;Worker&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 0);"&gt;process&lt;/span&gt;);&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;worker&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;start&lt;/span&gt;();&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;try&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;worker&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;join&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 0);"&gt;timeout&lt;/span&gt;);&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(0, 0, 0);"&gt;worker&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;exit&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;!=&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;){&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;worker&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;exit&lt;/span&gt;;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;throw&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;TimeoutException&lt;/span&gt;();&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;catch&lt;/span&gt; (&lt;span style="color: rgb(0, 0, 0);"&gt;InterruptedException&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;ex&lt;/span&gt;) &lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;worker&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;interrupt&lt;/span&gt;();&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;Thread&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;currentThread&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;().&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;interrupt&lt;/span&gt;();&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;throw&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;ex&lt;/span&gt;;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;finally&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;process&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;destroy&lt;/span&gt;();&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
	&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;Worker&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;extends&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;Thread&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;Process&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;process&lt;/span&gt;;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;Integer&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;exit&lt;/span&gt;;&lt;br /&gt;&#xD;
	&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;Worker&lt;/span&gt;(&lt;span style="color: rgb(0, 0, 0);"&gt;Process&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;process&lt;/span&gt;) &lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;process&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;process&lt;/span&gt;;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&#xD;
	&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;void&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;run&lt;/span&gt;() &lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;try&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;exit&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;process&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;waitFor&lt;/span&gt;();&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;catch&lt;/span&gt; (&lt;span style="color: rgb(0, 0, 0);"&gt;InterruptedException&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;ignore&lt;/span&gt;) &lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 128); font-weight: bold;"&gt;return&lt;/span&gt;;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&#xD;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&#xD;
	&lt;br /&gt;&#xD;
	&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/div&gt;</description>
      <category>java</category>
      <pubDate>Mon, 14 Nov 2011 11:43:00 GMT</pubDate>
      <guid>http://www.dongliu.net/post/496142</guid>
      <dc:creator>dongliu84</dc:creator>
      <dc:date>2011-11-14T11:43:00Z</dc:date>
    </item>
    <item>
      <title>SAE还是太寨了</title>
      <link>http://www.dongliu.net/post/496141</link>
      <description>&lt;p&gt;&#xD;
	这两天研究和试用的感觉，这东西不靠谱，BUG很多，容错和扩展能力都很可疑。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	看到这样的问题回复，实在让人无法放心吧：&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	&lt;img alt="" src="/blob/show/AMIfv94qE1l8_pfo5QxnDd1UUpnXBpc_Xaenh9ELwi9Z0MV7-s8tTM3jpHLmBZq2n322KZMpvwR6LTBdNba2-N03PeL9mDOte5SL0sddrL0Py2PhkA8pWTveJmIKqcif2tEGHprjyWXREjkf2ji5-T9rI7si9GmfqA" style="width: 703px; height: 143px;" /&gt;&lt;/p&gt;</description>
      <category>程序员</category>
      <pubDate>Sat, 12 Nov 2011 13:21:00 GMT</pubDate>
      <guid>http://www.dongliu.net/post/496141</guid>
      <dc:creator>dongliu84</dc:creator>
      <dc:date>2011-11-12T13:21:00Z</dc:date>
    </item>
    <item>
      <title>一淘的死法</title>
      <link>http://www.dongliu.net/post/492141</link>
      <description>&lt;p&gt;&#xD;
	从之前爱帮败诉于大众点评，就可以预见到一淘的后果了。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	一淘想要做入口，必须得电商数量众多，实力平均才有可能；像京东之类，实力远超其他电商，本身已成为购物首选站点，又怎么会容忍一淘抢夺用户流量。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	一淘的悲剧之处就在于，他所损害的，正是他所最依赖的，离开了京东、易购、当当的一淘一文不值。他比爱帮还悲剧的地方在于，爱帮是中立的第三方，而淘宝却同时身兼裁判员和运动员的角色。&lt;/p&gt;</description>
      <category>IT特快</category>
      <pubDate>Thu, 27 Oct 2011 13:27:00 GMT</pubDate>
      <guid>http://www.dongliu.net/post/492141</guid>
      <dc:creator>dongliu84</dc:creator>
      <dc:date>2011-10-27T13:27:00Z</dc:date>
    </item>
    <item>
      <title>大众点评的几个细节问题</title>
      <link>http://www.dongliu.net/post/488141</link>
      <description>&lt;p&gt;&#xD;
	总体上感觉大众点评产品的细节方面做得很粗糙。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	1. Andorid客户端提示有新版本4.3.3，点开后是打开一个网页，不是直接下载升级文件，而且网页上的下载链接是4.2版本，下载安装后继续提示升级。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	2. 用户可以用昵称和邮箱登录，但是用户的昵称和邮箱又都是可以随便修改。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	3. 登陆后竟然有5秒钟的跳转提示页面&amp;amp;&amp;hellip;&amp;hellip;&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	4. 修改email时，要求输入两次email确认，并且修改email后也没有邮件验证。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	5. 上传设置头像没有缩放、裁剪功能。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	6. 知道我在北京，默认邮件订阅优惠信息选择的城市还是上海。&lt;/p&gt;</description>
      <category>IT特快</category>
      <pubDate>Sun, 14 Aug 2011 04:06:00 GMT</pubDate>
      <guid>http://www.dongliu.net/post/488141</guid>
      <dc:creator>dongliu84</dc:creator>
      <dc:date>2011-08-14T04:06:00Z</dc:date>
    </item>
    <item>
      <title>Eclipse3.7的中文字体问题</title>
      <link>http://www.dongliu.net/post/483141</link>
      <description>&lt;p&gt;&#xD;
	Eclipse3.7版本的默认中文字体非常的小，如我这般视力良好的人都得把趴到显示器上来看才能看清，原因是其将的默认字体从Courier New改为了Consolas。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	Consolas是微软最早随Vista系统发布的等宽字体，专为程序员设计，字体美观而且字形上对0和O，1和l等字符做了很好的区分，用于代码的显示确实非常漂亮。可惜的是Consolas只包含英文字体，中文字体显示仍然由宋体等显示。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	解决办法是换一个字体来显示。在此推荐YaHei-Consolas字体，这个是国内&lt;a href="http://www.cnblogs.com/RobertLee/archive/2006/12/25/602646.html" target="_blank"&gt;Robert Lee&lt;/a&gt;制作的一个混合字体，使用雅黑字体显示中文，Consolas显示英文字符。雅黑作为矢量字体，在小像素、粗体、斜体上的显示都非常的好，相当的适合代码显示。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	&lt;a href="https://skydrive.live.com/redir.aspx?cid=9a61f898ecf0768d&amp;amp;resid=9A61F898ECF0768D!415" target="_blank"&gt;到此下载&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	下载的字体复制到C:\Windows\Fonts就可以使用了。在eclipse选项中，展开General-&amp;gt;Appearance-&amp;gt;Colors and Fonts-&amp;gt;basic，双击Test Font，然后选择字体：YaHei Consolas Hybrid即可。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	附效果图一张:&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	&lt;img alt="" src="/showfile/484141" style="width: 672px; height: 499px;" /&gt;&lt;/p&gt;</description>
      <category>java</category>
      <pubDate>Sun, 07 Aug 2011 10:42:00 GMT</pubDate>
      <guid>http://www.dongliu.net/post/483141</guid>
      <dc:creator>dongliu84</dc:creator>
      <dc:date>2011-08-07T10:42:00Z</dc:date>
    </item>
    <item>
      <title>关于《X-Men: First Class》不得不说的故事</title>
      <link>http://www.dongliu.net/post/482141</link>
      <description>&lt;p&gt;&#xD;
	《X-Men: First Class》是个好片，不过这部片子也说明了：永远不要指望美漫、及美漫改编的电影，会有&amp;ldquo;逻辑&amp;rdquo;这种东西存在。。关于这片子有几条不得不提：&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	1. 变形女其实是X教授的妹妹(虽然不是亲生的)！所以&amp;mdash;&amp;mdash;她其实是和万磁王、X教授同代的人！她在试图搞兄妹恋未果之后又盯上了Beast。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	2. 白皇后艾玛&amp;mdash;&amp;mdash;虽然后来被叫做&amp;ldquo;白婊子&amp;rdquo;，但是她年轻的时候穿的还是很多，很多的；而且&amp;mdash;&amp;mdash;她和万磁王、X教授也是同代的人！所以后来她是怎么从Jean Grey手里把镭射眼帅哥抢过来的啊！！&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	3. X教授年轻的时候不是秃头，并且是个不知人间疾苦、整天勾引漂亮妞的富二代！他对变形女的冷淡最终导致变形女转而跟随万磁王。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	4. Beast年轻的时候是个很文弱的小伙子，他在使用了某未经测试的药剂之后变成了现在样子，然后离所当然的被变形女抛弃了&amp;mdash;&amp;mdash;这个药剂本来是为了他和变形女开发的。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	5.全篇最伟大的爱情其实是发生在万磁王和X教授之间，但是只持续了很短的时间就感情破裂分手了。所以万磁王帮助X教授造出&lt;span&gt;Cerebrum是咋回事？万磁王和X教授一起去找Jean Grey又是怎么回事&amp;hellip;&amp;hellip;&lt;/span&gt;&lt;/p&gt;</description>
      <category>影视</category>
      <pubDate>Wed, 03 Aug 2011 09:33:00 GMT</pubDate>
      <guid>http://www.dongliu.net/post/482141</guid>
      <dc:creator>dongliu84</dc:creator>
      <dc:date>2011-08-03T09:33:00Z</dc:date>
    </item>
    <item>
      <title>JDK7新特性之AIO</title>
      <link>http://www.dongliu.net/post/480141</link>
      <description>&lt;p&gt;&#xD;
	JDK7中新加入的文件和网络io特性称为nio2(new io 2, 因为jdk1.4中已经有过一个nio了)，包含了众多性能和功能上的改进，其中最重要的部分，就是对异步io的支持，称为java aio(asynchronous IO)。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	异步io包括文件io和socket io，其中文件异步io各主流OS都提供了原生的支持，异步socket io则并未获得所有操作系统的支持。windows的IOCP，solaris等部分unix系统，已经实现了异步IO模型；而linux的epoll，bsd的kqueue等，仍属于非阻塞多路复用io模型，读写操作是同步的。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	jdk在1.4版本的nio中提供了对非阻塞多路复用同步io模型的支持，在linux上基于epoll实现，在bsd上基于kqueue实现，在Windows上则是基于select/poll实现，主要因为io模型的不同，nio无法使用IOCP来实现。jdk1.7中提供对aio的支持后，带来了两方面的好处：&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	1. Windows上可以使用iocp了。aio在Windows上基于iocp实现，解决了Windows上java nio由于使用较原始的select/poll导致的并发能力低下问题。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	windows IOCP是在94年随着NT3.5系统发布的，在17年后java终于提供了支持，这也算是个尴尬的事情吧。如果异步io是由操作系统实现(如IOCP)，可以利用硬件和驱动的异步功能，在内核态中调度线程完成数据读写，并且避免了多次内核态数据到用户态数据的拷贝操作，其性能会表现得相当优异。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	在linux系统上由于aio是使用epoll来实现，其性能并不会出现提升。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	2. 简化了网络变成模型。异步io相比较非阻塞多路复用模型更易理解，开发更为简单。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	和多路复用的java nio相比较，可以发现，异步io是在数据读取或者写入调用已经完成的时候，再通知调用者，而非阻塞多路复用io则是在有数据就绪，可以读写的时候通知调用者，读写仍然是由调用者执行并且是阻塞的(这意味着如果要同时进行其他工作，要控制读写操作不能阻塞太长时间或者需要将其放去单独的io线程执行)。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	JDK7中的java aio新增的类和接口主要有：&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	AsynchronousServerSocketChannel ，对应于bio中的ServerSocket和nio中的ServerSocketChannel，用于server端的网络程序。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	AsynchronousSocketChannel，对云关于bio中的Socket和nio中的SocketChannel，用于client端的网络程序。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	CompletionHandler，回调接口，在socket进行accept/connect/read/write等操作时，可以传入一个CompletionHandler的实现，操作执行完毕后，会调用注册的CompletionHandler。&lt;/p&gt;&#xD;
&lt;p&gt;&#xD;
	除了CompletionHandler这种回调方式，aio中还支持返回Future对象，使用Future来设定回调操作。&lt;/p&gt;</description>
      <category>java</category>
      <category>jdk7</category>
      <pubDate>Fri, 29 Jul 2011 07:29:00 GMT</pubDate>
      <guid>http://www.dongliu.net/post/480141</guid>
      <dc:creator>dongliu84</dc:creator>
      <dc:date>2011-07-29T07:29:00Z</dc:date>
    </item>
    <item>
      <title>LBS的死亡</title>
      <link>http://www.dongliu.net/post/479141</link>
      <description>&lt;p&gt;&#xD;
	LBS搞了这么多年，还是签到+同步到SNS这一套啊，&lt;br /&gt;&#xD;
	LBS同步到SNS最让人讨厌了啊，&lt;br /&gt;&#xD;
	刷屏的SNS比刷屏的话痨还要讨厌啊，&lt;br /&gt;&#xD;
	到处都是上个高速去个网吧都要LBS刷屏的人啊，&lt;br /&gt;&#xD;
	所有这些LBS刷屏的人，要全部取消关注的啊，&lt;br /&gt;&#xD;
	如果LBS死掉绝对就是刷屏把自己刷死的啊！！&lt;/p&gt;</description>
      <category>IT特快</category>
      <pubDate>Wed, 13 Jul 2011 14:36:00 GMT</pubDate>
      <guid>http://www.dongliu.net/post/479141</guid>
      <dc:creator>dongliu84</dc:creator>
      <dc:date>2011-07-13T14:36:00Z</dc:date>
    </item>
  </channel>
</rss>


