<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>cris_jxg</title>
    <description></description>
    <link>http://cris-jxg.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>hibernate session is closed 异常处理</title>
        <author>cris_jxg</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cris-jxg.javaeye.com">cris_jxg</a>&nbsp;
                    链接：<a href="http://cris-jxg.javaeye.com/blog/140994" style="color:red;">http://cris-jxg.javaeye.com/blog/140994</a>&nbsp;
          发表时间: 2007年11月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>hibernate经常报session is closed异常，实在没办法今天开始着手解决。仔细检查代码才发现有些地方的session关闭用的是session.closed()呵呵，threadLocal里面没有清楚session，却把其中的session给关闭了，自然下次opensession的时候会出错。</p>
<p>HibernateUtil.closeSession();</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://cris-jxg.javaeye.com/blog/140994#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 Nov 2007 19:20:37 +0800</pubDate>
        <link>http://cris-jxg.javaeye.com/blog/140994</link>
        <guid>http://cris-jxg.javaeye.com/blog/140994</guid>
      </item>
          <item>
        <title>正则表达式</title>
        <author>cris_jxg</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cris-jxg.javaeye.com">cris_jxg</a>&nbsp;
                    链接：<a href="http://cris-jxg.javaeye.com/blog/135340" style="color:red;">http://cris-jxg.javaeye.com/blog/135340</a>&nbsp;
          发表时间: 2007年10月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          正则表达式用于字符串处理、表单验证等场合，实用高效。现将一些常用的表达式收集于此，以备不时之需。<br />
<p>匹配中文字符的正则表达式： [\u4e00-\u9fa5]<br />
评注：匹配中文还真是个头疼的事，有了这个表达式就好办了</p>
<p>匹配双字节字符(包括汉字在内)：[^\x00-\xff]<br />
评注：可以用来计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）</p>
<p>匹配空白行的正则表达式：\n\s*\r<br />
评注：可以用来删除空白行</p>
<p>匹配HTML标记的正则表达式：&lt;(\S*?)[^&gt;]*&gt;.*?&lt;/\1&gt;|&lt;.*? /&gt;<br />
评注：网上流传的版本太糟糕，上面这个也仅仅能匹配部分，对于复杂的嵌套标记依旧无能为力</p>
<p>匹配首尾空白字符的正则表达式：^\s*|\s*$<br />
评注：可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式</p>
<p>匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<br />
评注：表单验证时很实用</p>
<p>匹配网址URL的正则表达式：[a-zA-z]+://[^\s]*<br />
评注：网上流传的版本功能很有限，上面这个基本可以满足需求</p>
<p>匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$<br />
评注：表单验证时很实用</p>
<p>匹配国内电话号码：\d{3}-\d{8}|\d{4}-\d{7}<br />
评注：匹配形式如 0511-4405222 或 021-87888822</p>
<p>匹配腾讯QQ号：[1-9][0-9]{4,}<br />
评注：腾讯QQ号从10000开始</p>
<p>匹配中国邮政编码：[1-9]\d{5}(?!\d)<br />
评注：中国邮政编码为6位数字</p>
<p>匹配身份证：\d{15}|\d{18}<br />
评注：中国的身份证为15位或18位</p>
<p>匹配ip地址：\d+\.\d+\.\d+\.\d+<br />
评注：提取ip地址时有用</p>
<p>匹配特定数字：<br />
^[1-9]\d*$　 　 //匹配正整数<br />
^-[1-9]\d*$ 　 //匹配负整数<br />
^-?[1-9]\d*$　　 //匹配整数<br />
^[1-9]\d*|0$　 //匹配非负整数（正整数 + 0）<br />
^-[1-9]\d*|0$　　 //匹配非正整数（负整数 + 0）<br />
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$　　 //匹配正浮点数<br />
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$　 //匹配负浮点数<br />
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$　 //匹配浮点数<br />
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$　　 //匹配非负浮点数（正浮点数 + 0）<br />
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$　　//匹配非正浮点数（负浮点数 + 0）<br />
评注：处理大量数据时有用，具体应用时注意修正</p>
<p>匹配特定字符串：<br />
^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串<br />
^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串<br />
^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串<br />
^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串<br />
^\w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串<br />
评注：最基本也是最常用的一些表达式</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://cris-jxg.javaeye.com/blog/135340#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 25 Oct 2007 09:44:05 +0800</pubDate>
        <link>http://cris-jxg.javaeye.com/blog/135340</link>
        <guid>http://cris-jxg.javaeye.com/blog/135340</guid>
      </item>
          <item>
        <title>java图像处理(切分)</title>
        <author>cris_jxg</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cris-jxg.javaeye.com">cris_jxg</a>&nbsp;
                    链接：<a href="http://cris-jxg.javaeye.com/blog/134987" style="color:red;">http://cris-jxg.javaeye.com/blog/134987</a>&nbsp;
          发表时间: 2007年10月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">
<p><br />
package com.caicai.photo;<br />
import java.io.*;<br />
import java.awt.*;<br />
import java.awt.image.*;<br />
import java.awt.Graphics;<br />
import java.awt.color.ColorSpace;<br />
import javax.imageio.ImageIO;</p>
<p>public class ImageCut {</p>
<p><br />
&nbsp; /**<br />
&nbsp;&nbsp; * 缩放图像<br />
&nbsp;&nbsp; * <br />
&nbsp;&nbsp; * @param srcImageFile<br />
&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 源图像文件地址<br />
&nbsp;&nbsp; * @param result<br />
&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缩放后的图像地址<br />
&nbsp;&nbsp; * @param scale<br />
&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缩放比例<br />
&nbsp;&nbsp; * @param flag<br />
&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缩放选择:true 放大; false 缩小;<br />
&nbsp;&nbsp; */<br />
&nbsp; public static void scale(String srcImageFile, String result, int scale,<br />
&nbsp;&nbsp;&nbsp; boolean flag) {<br />
&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件<br />
&nbsp;&nbsp;&nbsp; int width = src.getWidth(); // 得到源图宽<br />
&nbsp;&nbsp;&nbsp; int height = src.getHeight(); // 得到源图长<br />
&nbsp;&nbsp;&nbsp; if (flag) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; // 放大<br />
&nbsp;&nbsp;&nbsp;&nbsp; width = width * scale;<br />
&nbsp;&nbsp;&nbsp;&nbsp; height = height * scale;<br />
&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp; // 缩小<br />
&nbsp;&nbsp;&nbsp;&nbsp; width = width / scale;<br />
&nbsp;&nbsp;&nbsp;&nbsp; height = height / scale;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; Image image = src.getScaledInstance(width, height,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Image.SCALE_DEFAULT);<br />
&nbsp;&nbsp;&nbsp; BufferedImage tag = new BufferedImage(width, height,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedImage.TYPE_INT_RGB);<br />
&nbsp;&nbsp;&nbsp; Graphics g = tag.getGraphics();<br />
&nbsp;&nbsp;&nbsp; g.drawImage(image, 0, 0, null); // 绘制缩小后的图<br />
&nbsp;&nbsp;&nbsp; g.dispose();<br />
&nbsp;&nbsp;&nbsp; ImageIO.write(tag, &quot;JPEG&quot;, new File(result));// 输出到文件流<br />
&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; /**<br />
&nbsp;&nbsp; * 图像切割<br />
&nbsp;&nbsp; * <br />
&nbsp;&nbsp; * @param srcImageFile<br />
&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 源图像地址<br />
&nbsp;&nbsp; * @param descDir<br />
&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 切片目标文件夹<br />
&nbsp;&nbsp; * @param destWidth<br />
&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目标切片宽度<br />
&nbsp;&nbsp; * @param destHeight<br />
&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目标切片高度<br />
&nbsp;&nbsp; */<br />
&nbsp; public static void cut(String srcImageFile, String descDir, int destWidth,<br />
&nbsp;&nbsp;&nbsp; int destHeight) {<br />
&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; Image img;<br />
&nbsp;&nbsp;&nbsp; ImageFilter cropFilter;<br />
&nbsp;&nbsp;&nbsp; // 读取源图像<br />
&nbsp;&nbsp;&nbsp; BufferedImage bi = ImageIO.read(new File(srcImageFile));<br />
&nbsp;&nbsp;&nbsp; int srcWidth = bi.getHeight(); // 源图宽度<br />
&nbsp;&nbsp;&nbsp; int srcHeight = bi.getWidth(); // 源图高度<br />
&nbsp;&nbsp;&nbsp; Image image = bi.getScaledInstance(srcWidth, srcHeight,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Image.SCALE_DEFAULT);</p>
<p>&nbsp;&nbsp;&nbsp; if (srcWidth &gt; destWidth &amp;&amp; srcHeight &gt; destHeight) {&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //destWidth = 200; // 切片宽度<br />
&nbsp;&nbsp;&nbsp;&nbsp; //destHeight = 150; // 切片高度<br />
&nbsp;&nbsp;&nbsp;&nbsp; int cols = 0; // 切片横向数量<br />
&nbsp;&nbsp;&nbsp;&nbsp; int rows = 0; // 切片纵向数量<br />
&nbsp;&nbsp;&nbsp;&nbsp; // 计算切片的横向和纵向数量<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (srcWidth % destWidth == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cols = srcWidth / destWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cols = (int) Math.floor(srcWidth / destWidth) + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (srcHeight % destHeight == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows = srcHeight / destHeight;<br />
&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows = (int) Math.floor(srcHeight / destHeight) + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; // 循环建立切片<br />
&nbsp;&nbsp;&nbsp;&nbsp; // 改进的想法:是否可用多线程加快切割速度<br />
&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; rows; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; cols; j++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 四个参数分别为图像起点坐标和宽高<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 即: CropImageFilter(int x,int y,int width,int height)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cropFilter = new CropImageFilter(j * destWidth, i * destHeight,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Math.min(destWidth,srcWidth - j * destWidth), Math.min(srcHeight - i * destHeight,destHeight));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; img = Toolkit.getDefaultToolkit().createImage(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new FilteredImageSource(image.getSource(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cropFilter));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedImage tag = new BufferedImage(Math.min(destWidth,srcWidth - j * destWidth),<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Math.min(srcHeight - i * destHeight,destHeight), BufferedImage.TYPE_INT_RGB);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Graphics g = tag.getGraphics();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.drawImage(img, 0, 0, null); // 绘制缩小后的图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.dispose();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 输出为文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIO.write(tag, &quot;JPEG&quot;, new File(descDir<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + &quot;pre_map_&quot; + i + &quot;_&quot; + j + &quot;.jpg&quot;));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; /**<br />
&nbsp;&nbsp; * 图像类型转换<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * GIF-&gt;JPG GIF-&gt;PNG PNG-&gt;JPG PNG-&gt;GIF(X)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp; public static void convert(String source, String result) {<br />
&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; File f = new File(source);<br />
&nbsp;&nbsp;&nbsp; f.canRead();<br />
&nbsp;&nbsp;&nbsp; f.canWrite();<br />
&nbsp;&nbsp;&nbsp; BufferedImage src = ImageIO.read(f);<br />
&nbsp;&nbsp;&nbsp; ImageIO.write(src, &quot;JPG&quot;, new File(result));<br />
&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp; // TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; /**<br />
&nbsp;&nbsp; * 彩色转为黑白<br />
&nbsp;&nbsp; * <br />
&nbsp;&nbsp; * @param source<br />
&nbsp;&nbsp; * @param result<br />
&nbsp;&nbsp; */<br />
&nbsp; public static void gray(String source, String result) {<br />
&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; BufferedImage src = ImageIO.read(new File(source));<br />
&nbsp;&nbsp;&nbsp; ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);<br />
&nbsp;&nbsp;&nbsp; ColorConvertOp op = new ColorConvertOp(cs, null);<br />
&nbsp;&nbsp;&nbsp; src = op.filter(src, null);<br />
&nbsp;&nbsp;&nbsp; ImageIO.write(src, &quot;JPEG&quot;, new File(result));<br />
&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; /**<br />
&nbsp;&nbsp; * @param args<br />
&nbsp;&nbsp; */<br />
&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp; cut(&quot;f:\\IMG_0101.jpg&quot;, &quot;f:\\t\\&quot;, 300, 300);<br />
&nbsp; }<br />
&nbsp;</p>
<p><br />
}<br />
</p>
</font>
          <br/><br/>
          <span style="color:red;">
            <a href="http://cris-jxg.javaeye.com/blog/134987#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 24 Oct 2007 08:57:58 +0800</pubDate>
        <link>http://cris-jxg.javaeye.com/blog/134987</link>
        <guid>http://cris-jxg.javaeye.com/blog/134987</guid>
      </item>
          <item>
        <title>PermGen space error jvm内存益处</title>
        <author>cris_jxg</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cris-jxg.javaeye.com">cris_jxg</a>&nbsp;
                    链接：<a href="http://cris-jxg.javaeye.com/blog/119765" style="color:red;">http://cris-jxg.javaeye.com/blog/119765</a>&nbsp;
          发表时间: 2007年09月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="postText">
<p>1、<br />
</p>
<p>PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出，解决方法也一定是加大内存。说说为什么会内存益出：这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域，它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理，所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。</p>
改正方法：-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m </div>
<div class="entry-more" id="more">
<p>2、</p>
<p>在tomcat中redeploy时出现outofmemory的错误.</p>
<p>可以有以下几个方面的原因:</p>
<p>１,使用了<u><font color="#800080">proxool,因为proxool内部包含了一个老版本的cglib.</font></u></p>
<p><u><font color="#800080">2, log4j,最好不用,只用common-logging</font></u></p>
<p><u><font color="#800080">3, 老版本的cglib,快点更新到最新版。</font></u></p>
<p><u><font color="#800080">４，更新到最新的hibernate3.2</font></u><br />
</p>
3、<br />
<br />
这里以tomcat环境为例，其它WEB服务器如jboss,weblogic等是同一个道理。<br />
一、java.lang.OutOfMemoryError: PermGen space
<p>PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,<br />
这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,<br />
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对<br />
PermGen space进行清理，所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,<br />
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小<br />
超过了jvm默认的大小(4M)那么就会产生此错误信息了。<br />
解决方法： 手动设置MaxPermSize大小</p>
<p>修改TOMCAT_HOME/bin/catalina.sh<br />
在&ldquo;echo &quot;Using CATALINA_BASE:&nbsp;&nbsp; $CATALINA_BASE&quot;&rdquo;上面加入以下行：<br />
JAVA_OPTS=&quot;-server -XX:PermSize=64M -XX:MaxPermSize=128m<br />
建议：将相同的第三方jar文件移置到tomcat/shared/lib目录下，这样可以达到减少jar 文档重复占用内存的目的。</p>
<p>二、java.lang.OutOfMemoryError: Java heap space<br />
Heap size 设置<br />
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值，<br />
其初始空间(即-Xms)是物理内存的1/64，最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可<br />
进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。<br />
提示：在JVM中如果98％的时间是用于GC且可用的Heap size 不足2％的时候将抛出此异常信息。<br />
提示：Heap Size 最大不要超过可用物理内存的80％，一般的要将-Xms和-Xmx选项设置为相同，而-Xmn为1/4的-Xmx值。 <br />
解决方法：手动设置Heap size<br />
修改TOMCAT_HOME/bin/catalina.sh<br />
在&ldquo;echo &quot;Using CATALINA_BASE:&nbsp;&nbsp; $CATALINA_BASE&quot;&rdquo;上面加入以下行：<br />
JAVA_OPTS=&quot;-server -Xms800m -Xmx800m&nbsp;&nbsp; -XX:MaxNewSize=256m&quot;</p>
<p>三、实例，以下给出1G内存环境下java jvm 的参数设置参考：</p>
<p>JAVA_OPTS=&quot;-server -Xms800m -Xmx800m&nbsp; -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true &quot;</p>
<p><br />
三、相关资料</p>
<p><a href="http://www.tot.name/show/3/7/20061112220131.htm">/show/3/7/20061112220131.htm</a></p>
<p><a href="http://www.tot.name/show/3/7/20061112220054.htm">/show/3/7/20061112220054.htm</a></p>
<p><a href="http://www.tot.name/show/3/7/20061112220201.htm">/show/3/7/20061112220201.htm</a></p>
题外话：经常看到网友抱怨tomcat的性能不如...，不稳定等，其实根据笔者几年的经验，从&quot;互联星空&ldquo;到现在的房产门户网，我们<br />
均使用tomcat作为WEB服务器，每天访问量百万多，tomcat仍然运行良好。建议大家有问题多从自己程序入手，多看看java的DOC文档<br />
并详细了解JVM的知识。这样开发的程序才会健壮。<br />
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://cris-jxg.javaeye.com/blog/119765#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 03 Sep 2007 12:34:37 +0800</pubDate>
        <link>http://cris-jxg.javaeye.com/blog/119765</link>
        <guid>http://cris-jxg.javaeye.com/blog/119765</guid>
      </item>
          <item>
        <title>求助,jsp网站应用windows2003系统,但总是重启,加了个博客系统后就内存溢出</title>
        <author>cris_jxg</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cris-jxg.javaeye.com">cris_jxg</a>&nbsp;
                    链接：<a href="http://cris-jxg.javaeye.com/blog/117899" style="color:red;">http://cris-jxg.javaeye.com/blog/117899</a>&nbsp;
          发表时间: 2007年08月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">&nbsp;&nbsp; 原来开发的工程有些乱,运营有半年了吧,随着脏数据和数据量的加大,系统开始出现很多问题,现在面临的最大问题是系统[频繁重启,基本上每天一次吧,真受不了了,怀疑是硬件问题.</font></p>
<p>&nbsp; 另外系统咬添加一个博客系统,改的开源的roller,但加上后在运行不到1小时就开始报内存溢出错误,jvm设置的值是1.3G,服务器内存2G,cup Intel&nbsp;xeon 3.0&nbsp; 现在怀疑内存不足,是不是这个原因呢? 当然也不能只是一味的扩充硬件,最终要的还是软件问题,希望看到的能</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://cris-jxg.javaeye.com/blog/117899#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 29 Aug 2007 11:12:38 +0800</pubDate>
        <link>http://cris-jxg.javaeye.com/blog/117899</link>
        <guid>http://cris-jxg.javaeye.com/blog/117899</guid>
      </item>
          <item>
        <title>Windows 2003 Server 服务器自动定时重启</title>
        <author>cris_jxg</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cris-jxg.javaeye.com">cris_jxg</a>&nbsp;
                    链接：<a href="http://cris-jxg.javaeye.com/blog/115227" style="color:red;">http://cris-jxg.javaeye.com/blog/115227</a>&nbsp;
          发表时间: 2007年08月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong></strong><br />
<br />
<div class="t_msgfont" id="message406">&nbsp;&nbsp; <a href="http://pub2.wengao.cn/code/gotourl.asp?adsid=258&amp;weburl=http://www.lmki.cn/movie&amp;userid=7825&amp;auserid=305&amp;keyword=电影&amp;webid=6085&amp;curl=http://3toss.cn/bbs/thread-372-1-1.html" onmouseover="wengaoshowTooltip('dHTMLToolTip','电影',event,2,'p','','#ffffff', '#ffffff', '#000000', '2000',204,299,0)" target="_blank" onmouseout="wengaohideTooltiptime('dHTMLToolTip')" style="BORDER-RIGHT: 0px dotted; BORDER-TOP: 0px dotted; FONT-SIZE: 1em; BORDER-LEFT: 0px dotted; COLOR: #3333ff; BORDER-BOTTOM: 3px dotted">电影</a>、游戏服务器基本上每天都要重启一下，要是每天大清早起来重启。。。吃不消。。。写一个命令行，做好一个计划任务就行了。。。</div>
<div class="t_msgfont">随便新建一个文件如rebootsystem.cmd 内容这样写：shutdown -r -f -t 30 保存。。。</div>
<div class="t_msgfont"></div>
<div class="t_msgfont">把需要<a href="http://pub2.wengao.cn/code/gotourl.asp?adsid=1305&amp;weburl=http://h50025.www5.hp.com/ENP5/Public/Content.aspx?contentID=22605&amp;portalID=365&amp;pageID=1&amp;userid=7825&amp;auserid=7509&amp;keyword=运行&amp;webid=6085&amp;curl=http://3toss.cn/bbs/thread-372-1-1.html" onmouseover="wengaoshowTooltip('dHTMLToolTip','运行',event,3,'p','','#ffffff', '#ffffff', '#000000', '2000',676,321,0)" target="_blank" onmouseout="wengaohideTooltiptime('dHTMLToolTip')" style="BORDER-RIGHT: 0px dotted; BORDER-TOP: 0px dotted; FONT-SIZE: 1em; BORDER-LEFT: 0px dotted; COLOR: #3333ff; BORDER-BOTTOM: 3px dotted">运行</a>的其它应用程序加入到windows的启动（位于开始菜单-&gt;程序-&gt;启动）里边即可自动运行。。。新建计划任何就不写了，总该会的吧。。。</div>
<div class="t_msgfont"></div>
<div class="t_msgfont">&nbsp;附：ShutDown用法及参数用法: shutdown [-i | -l | -s | -r | -a] [-f] [-m \\computername] [-t xx] [-c &quot;comment&quot;] [-d up:xx:yy] 没有参数 显示此消息(与 ? 相同) -i 显示 GUI 界面，必须是第一个选项 -l 注销(不能与选项 -m 一起使用) -s 关闭此计算机 -r 关闭并重启动此计算机 -a 放弃<a href="http://pub2.wengao.cn/code/gotourl.asp?adsid=1199&amp;weburl=http://it.tom.com/mobile/2007/dopod_s1.html&amp;userid=7825&amp;auserid=7509&amp;keyword=系统&amp;webid=6085&amp;curl=http://3toss.cn/bbs/thread-372-1-1.html" onmouseover="wengaoshowTooltip('dHTMLToolTip','系统',event,1,'p','','#ffffff', '#ffffff', '#000000', '2000',685,387,0)" target="_blank" onmouseout="wengaohideTooltiptime('dHTMLToolTip')" style="BORDER-RIGHT: 0px dotted; BORDER-TOP: 0px dotted; FONT-SIZE: 1em; BORDER-LEFT: 0px dotted; COLOR: #3333ff; BORDER-BOTTOM: 3px dotted">系统</a>关机 -m \\computername 远程计算机关机/重启动/放弃 -t xx 设置关闭的超时为 xx 秒 -c &quot;comment&quot; 关闭注释(最大 127 个字符) -f 强制运行的应用程序关闭而没有警告 -d [p]:xx:yy 关闭原因代码 u 是用户代码 p 是一个计划的关闭代码 xx 是一个主要原因代码(小于 256 的正整数) yy 是一个次要原因代码(小于 65536 的正整数) -f：强行关闭应用程序 -m \\计算机名：控制远程计算机 -i：显示图形用户界面，但必须是Shutdown的第一个选项 -l：注销当前用户 -r：关机并重启 -t时间：设置关机倒计时 -c &quot;消息内容&quot;：输入关机对话框中的消息内容(不能超127个字符) </div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://cris-jxg.javaeye.com/blog/115227#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 22 Aug 2007 12:28:48 +0800</pubDate>
        <link>http://cris-jxg.javaeye.com/blog/115227</link>
        <guid>http://cris-jxg.javaeye.com/blog/115227</guid>
      </item>
          <item>
        <title>windows2003服务器频繁重启</title>
        <author>cris_jxg</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cris-jxg.javaeye.com">cris_jxg</a>&nbsp;
                    链接：<a href="http://cris-jxg.javaeye.com/blog/115224" style="color:red;">http://cris-jxg.javaeye.com/blog/115224</a>&nbsp;
          发表时间: 2007年08月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          公司使用windows2003做服务器,web服务器是tomcat, 以前开发的系统和现在的系统都在上面,系统开发的有点乱,没办法还是要跑起来,但今天上午系统就重启了两次,以前也经常出现重启现象,也出现过tomcat对请求不响应的现象,该从哪儿入手找问题呢?<br />&nbsp; 或者有什么好的性能检测工具推荐一下.
          <br/><br/>
          <span style="color:red;">
            <a href="http://cris-jxg.javaeye.com/blog/115224#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 22 Aug 2007 12:17:17 +0800</pubDate>
        <link>http://cris-jxg.javaeye.com/blog/115224</link>
        <guid>http://cris-jxg.javaeye.com/blog/115224</guid>
      </item>
      </channel>
</rss>