﻿<?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-Timnity的笔记-随笔分类-操作系统/开发环境</title><link>http://www.blogjava.net/Timnity/category/6494.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 29 Apr 2008 16:46:11 GMT</lastBuildDate><pubDate>Tue, 29 Apr 2008 16:46:11 GMT</pubDate><ttl>60</ttl><item><title>完成了Ubuntu 8.04的安装</title><link>http://www.blogjava.net/Timnity/archive/2008/04/29/197405.html</link><dc:creator>Timnity</dc:creator><author>Timnity</author><pubDate>Tue, 29 Apr 2008 14:37:00 GMT</pubDate><guid>http://www.blogjava.net/Timnity/archive/2008/04/29/197405.html</guid><wfw:comment>http://www.blogjava.net/Timnity/comments/197405.html</wfw:comment><comments>http://www.blogjava.net/Timnity/archive/2008/04/29/197405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Timnity/comments/commentRss/197405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Timnity/services/trackbacks/197405.html</trackback:ping><description><![CDATA[&nbsp; 最近真是比较忙，好不容易偷了一个晚上，在Ubuntu 8.04出来的当天晚上就安装好了。Ubuntu果然是桌面版专用，简单易用，几乎没有费什么劲，除了安装完后，又再下了语言包和升级包比较费时间外，一路顺畅搞定。<br />
&nbsp; 之前一直在VM上安装的，传说中的Compiz根本没用过。曾经动过无数念头，想亲身体验一下，可是电脑虽然是性能不错的Thinkpad T60，但是工作的资料都太重要了，每天还要忙于各个项目，一个接一个没停过，一年多来这竟成了奢望。呵呵，当然，时间是挤出来的，不能为自己的懒惰找借口：）于是空出了一个盘，专门装了Ubuntu。以前在Ubuntu 6.04的时候，装个ATI的驱动真的很困难，改好多地方，Xwindow不小心就挂了，而当时我只会一招－－VM的快照！晕吧？！于是打开设备管理器——出乎意料，居然点点鼠标就搞定了，这个flgx限定设备管理，天哪～～～有点心疼以前费掉的时间了。<br />
&nbsp; 昨晚搞定了Compiz，真是简单，估计第2次一个半小时可以搞定整个系统了。看到视觉特效，全开了，我塞，真是爽啊，兴奋了好久！：） 不过好像Ubuntu只有两个桌面，所以旋转的时候不是一个立方体，而是一个平面，并且开了特效却没有发现立体窗口。慢慢玩吧<br />
&nbsp; 当然，在linux里我还是很菜的菜鸟，基础还是要学起的，操作系统不止是XWindow这个东西这么简单，用windows的思维，这个系统算是能用了，但是从了解的角度看，还远远不足。学习是一件有成就感的事，呵呵～～～：）&nbsp; <br />
<br />
<img src ="http://www.blogjava.net/Timnity/aggbug/197405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Timnity/" target="_blank">Timnity</a> 2008-04-29 22:37 <a href="http://www.blogjava.net/Timnity/archive/2008/04/29/197405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache2.x Tomcat5.x windows2003整合详解(转)</title><link>http://www.blogjava.net/Timnity/archive/2005/12/29/25951.html</link><dc:creator>Timnity</dc:creator><author>Timnity</author><pubDate>Thu, 29 Dec 2005 13:50:00 GMT</pubDate><guid>http://www.blogjava.net/Timnity/archive/2005/12/29/25951.html</guid><wfw:comment>http://www.blogjava.net/Timnity/comments/25951.html</wfw:comment><comments>http://www.blogjava.net/Timnity/archive/2005/12/29/25951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Timnity/comments/commentRss/25951.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Timnity/services/trackbacks/25951.html</trackback:ping><description><![CDATA[<P>介绍一下应用环境 ：<BR>windows 2003&nbsp; apache_2.0.55&nbsp;&nbsp; tomcat-5.5.9<BR><BR>后面两个软件都可以从 <A href="http://www.apache.org/"><FONT color=#000000>www.Apache.org</FONT></A>&nbsp;免费下载得到。</P>
<P>apache_2.0.55-win32-x86-no_ssl.msi 这个文件下载后安装就可以使用无需编译</P>
<P>jakarta-tomcat-5.5.9.exe 直接安装就可以了</P>
<P>进入正题，由于win默认IIS占据了80端口所以要安装Apache之前先打开 <STRONG>开始菜单-管理工具-服务选项</STRONG></P>
<P>停止 IIS Admin Service 服务 在这个上面右键选属性把启动类型更改为禁止，以免下载<A href="http://www.gamvan.com/server/" target=_blank>操作系统</A>重起，iis有自动开始服务造成80端口与apache冲突。</P>
<P>接着双击apache_2.0.55-win32-x86-no_ssl.msi文件进行安装，安装过程可选安装目录。</P>
<P>我这里是装在了 C:Apache Group目录下面，安装程序自建了个Apache2目录，所以安装完毕Apache文件都在C:Apache GroupApache2目录下面。</P>
<P>安装结束后打开 <A href="http://localhost/"><FONT color=#000000>http://localhost/</FONT></A> 应该可以看到Apache欢迎画面，至此Apache安装成功。</P>
<P>接着安装TOMCAT，关于TOMCAT的安装方法网上已经很多资源了，而且5.0以后的TOMCAT安装很容易，直接双击运行选择安装目录一路下一步就行了。</P>
<P>我的TOMCAT安装在了C:Tomcat5目录下。默认的TOMCAT服务端口是8080，所以安装完毕后浏览器里键入<A href="http://localhost:8080/"><FONT color=#000000>http://localhost:8080</FONT></A>&nbsp;应该能看到tomcat的欢迎画面，是一只猫，我想大家都熟悉了。</P>
<P><STRONG>二者都正确安装后，接着开始整合工作。</STRONG></P>
<P>整合二者需要apache出品的一个组件，文件不大所以我们在文章内提供下载 <IMG style="CURSOR: pointer" onclick=javascript:window.open(this.src); src="http://www.gamvan.com/gamvan889/GVeditor/sysimage/fileExt/zip.gif" onload="javascript:if(this.width>500)this.style.width=500;" border=0><A href="http://www.gamvan.com/upfiles/server/windows/2005/10/2005102914501373499.zip" target=_blank><FONT color=#000000>jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip</FONT></A>&nbsp;解压缩后其实我们只需要modules目录里面的mod_jk2.so 文件，copy到Apache安装目录下modules文件夹里，我们的路径是C:\Apache Group\Apache2\modules&nbsp; </P>
<P>接着在C:\Apache Group\Apache2\conf目录下建workers2.properties文件。内容用记事本编辑为：</P>
<P>
<TABLE style="BORDER-RIGHT: 1px; BORDER-TOP: 1px; BORDER-LEFT: 1px; BORDER-BOTTOM: 1px" borderColor=#e0e0e0 cellSpacing=1 cellPadding=4 width="95%" align=center border=1 TABLE-LAYOUT: fixed>
<TBODY>
<TR>
<TD style="HEIGHT: 25px; WORD-WRAP: break-word" vAlign=top bgColor=#f6f6f6><FONT style="COLOR: #b0b0b0">代码内容</FONT><BR>[shm] <BR>file=${serverRoot}/logs/shm.file <BR>size=1048576 <BR>#The socket channel<BR>[channel.socket:localhost:8009] <BR>port=8009 <BR>host=127.0.0.1 <BR>#define the worker <BR>[ajp13:localhost:8009] <BR>channel=channel.socket:localhost:8009 <BR>#uri mapping <BR>[uri:/*.jsp] <BR>[uri:/*.do] <BR>[uri:/*.gv] <BR>worker=ajp13:localhost:8009</TD></TR></TBODY></TABLE></P>
<P>然后用记事本编辑C:\Apache Group\Apache2\conf\httpd.conf 文件，在文件尾部追加一下内容</P>
<P>
<TABLE style="BORDER-RIGHT: 1px; BORDER-TOP: 1px; BORDER-LEFT: 1px; BORDER-BOTTOM: 1px" borderColor=#e0e0e0 cellSpacing=1 cellPadding=4 width="95%" align=center border=1 TABLE-LAYOUT: fixed>
<TBODY>
<TR>
<TD style="HEIGHT: 25px; WORD-WRAP: break-word" vAlign=top bgColor=#f6f6f6><FONT style="COLOR: #b0b0b0">代码内容<BR>#服务器IP地址</FONT><BR>NameVirtualHost <FONT color=#dd226d>192.168.1.100:80<BR></FONT>&lt;VirtualHost <FONT color=#d52b6f>192.168.1.100:80</FONT>&gt;<BR><BR><FONT color=#888888>#管理员EMAIL</FONT><BR>ServerAdmin <A href="mailto:gamvan@gmail.com"><FONT color=#000000>gamvan@gmail.com</FONT></A><BR><BR><FONT color=#6d6d5f>#网站绝对路径</FONT><BR>DocumentRoot "<FONT color=#e61a42>E:\MYJAVA\myWeb</FONT>"<BR><BR><FONT color=#666666># 主机头 如果有域名解析到这个IP可以直接写域名如 club.gamvan.com</FONT><BR>ServerName <FONT color=#dd226d>192.168.1.100&nbsp;&nbsp;<BR></FONT><BR><FONT color=#666666>#以下两行是日志文件默认即可</FONT><BR>ErrorLog logs/error.log<BR>CustomLog logs/access.log common<BR>&lt;/VirtualHost&gt;</TD></TR></TBODY></TABLE></P>
<P>实际应用中最好去掉井号后面的灰色注释内容，好了APACHE搞定了。接下来配置TOMCAT的虚拟目录，我想大家都很熟悉，但是我这里还是罗嗦一下业队的起文章标题 详解 二字。<BR><BR>找到TOMCAT安装目录，我这里是C:\Tomcat5\conf 记事本打开 server.xml文件 ctrl+f查找到这个标签的<FONT color=#e61a94></P>
<P>
<TABLE style="WIDTH: 406px; HEIGHT: 63px" cellSpacing=1 cellPadding=2 width=406 bgColor=#e6e6e6 border=0>
<TBODY>
<TR bgColor=#f6f6f6>
<TD class=text3>&lt;!-- Define the default virtual host --&gt;<BR>&lt;Host name="localhost" debug="0" appBase="webapps"<BR>unpackWARs="true" autoDeploy="true"&gt;</TD></TR></TBODY></TABLE></P>
<P><BR></FONT>我们不管这个，直接在这个标签上面加入一个完整的<A href="http://www.cxchina.cn/" target=_blank>虚拟主机</A>配置标签，注意要和apache配置的虚拟目录一样，代码如下：</P>
<P>
<TABLE style="BORDER-RIGHT: 1px; BORDER-TOP: 1px; BORDER-LEFT: 1px; BORDER-BOTTOM: 1px" borderColor=#e0e0e0 cellSpacing=1 cellPadding=4 width="95%" align=center border=1 TABLE-LAYOUT: fixed>
<TBODY>
<TR>
<TD style="HEIGHT: 25px; WORD-WRAP: break-word" vAlign=top bgColor=#f6f6f6>
<P><FONT style="COLOR: #b0b0b0">代码内容</FONT><BR>&lt;Host name="192.168.1.100" appBase="<FONT color=#ee113d>E:\MYJAVA\myWeb</FONT>"&nbsp; unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"&gt;<BR>&lt;Context path="" docBase="" debug="0" /&gt;<BR>&lt;/Host&gt;<BR></P></TD></TR></TBODY></TABLE><BR>OK，记得保存文件，然后重起tomcat ， 重起apache， 键入<A href="http://192.168.1.100/"><FONT color=#000000>http://192.168.1.100</FONT></A>&nbsp;就应该可以访问JSP文件了，测试一下吧。<BR><BR>注意我这个 192.168.1.100 是我的内网本机IP，实际使用的话你可以换成你自己的内网本机IP，或者干脆用127.0.0.1 <BR></P>
<P target="_blank">PS：apache服务器和tomcat整合后不能立即访问，需要等待一会，可能是他俩内部握手确认合作协议呢， 刷几下就行了。实在不行重起，还不行就重新配置一遍，如何还不行请到 <A href="http://club.gamvan.com/"><FONT color=#000000>club.gamvan.com </FONT></A><A href="http://www.gamvan.com/" target=_blank>今晚在线</A><A href="http://www.gamvan.com/developer" target=_blank>开发者</A><A href="http://club.gamvan.com/" target=_blank>社区</A>来交流一下，让大家一起帮助您解决。</P><img src ="http://www.blogjava.net/Timnity/aggbug/25951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Timnity/" target="_blank">Timnity</a> 2005-12-29 21:50 <a href="http://www.blogjava.net/Timnity/archive/2005/12/29/25951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>堆和栈的区别 [转]</title><link>http://www.blogjava.net/Timnity/archive/2005/12/29/25939.html</link><dc:creator>Timnity</dc:creator><author>Timnity</author><pubDate>Thu, 29 Dec 2005 13:29:00 GMT</pubDate><guid>http://www.blogjava.net/Timnity/archive/2005/12/29/25939.html</guid><wfw:comment>http://www.blogjava.net/Timnity/comments/25939.html</wfw:comment><comments>http://www.blogjava.net/Timnity/archive/2005/12/29/25939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Timnity/comments/commentRss/25939.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Timnity/services/trackbacks/25939.html</trackback:ping><description><![CDATA[堆和栈的区别<BR>一、预备知识—程序的内存分配<BR>一个由c/C++编译的程序占用的内存分为以下几个部分<BR>1、栈区（stack）—&nbsp;由编译器自动分配释放&nbsp;，存放函数的参数值，局部变量的值等。其操作方式类似于数据结构中的栈。<BR>2、堆区（heap）&nbsp;—&nbsp;一般由程序员分配释放，&nbsp;若程序员不释放，程序结束时可能由OS回收&nbsp;。注意它与数据结构中的堆是两回事，分配方式倒是类似于链表，呵呵。<BR>3、全局区（静态区）（static）—，全局变量和静态变量的存储是放在一块的，初始化的全局变量和静态变量在一块区域，&nbsp;未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。&nbsp;-&nbsp;程序结束后有系统释放&nbsp;<BR>4、文字常量区—常量字符串就是放在这里的。&nbsp;程序结束后由系统释放<BR>5、程序代码区—存放函数体的二进制代码。<BR>二、例子程序&nbsp;<BR>这是一个前辈写的，非常详细&nbsp;<BR>//main.cpp&nbsp;<BR>int&nbsp;a&nbsp;=&nbsp;0;&nbsp;全局初始化区&nbsp;<BR>char&nbsp;*p1;&nbsp;全局未初始化区&nbsp;<BR>main()&nbsp;<BR>{&nbsp;<BR>int&nbsp;b;&nbsp;栈&nbsp;<BR>char&nbsp;s[]&nbsp;=&nbsp;"abc";&nbsp;栈&nbsp;<BR>char&nbsp;*p2;&nbsp;栈&nbsp;<BR>char&nbsp;*p3&nbsp;=&nbsp;"123456";&nbsp;123456\0在常量区，p3在栈上。&nbsp;<BR>static&nbsp;int&nbsp;c&nbsp;=0；&nbsp;全局（静态）初始化区&nbsp;<BR>p1&nbsp;=&nbsp;(char&nbsp;*)malloc(10);&nbsp;<BR>p2&nbsp;=&nbsp;(char&nbsp;*)malloc(20);&nbsp;<BR>分配得来得10和20字节的区域就在堆区。&nbsp;<BR>strcpy(p1,&nbsp;"123456");&nbsp;123456\0放在常量区，编译器可能会将它与p3所指向的"123456"优化成一个地方。&nbsp;<BR>}&nbsp;<BR><BR><BR>二、堆和栈的理论知识&nbsp;<BR>2.1申请方式&nbsp;<BR>stack:&nbsp;<BR>由系统自动分配。&nbsp;例如，声明在函数中一个局部变量&nbsp;int&nbsp;b;&nbsp;系统自动在栈中为b开辟空间&nbsp;<BR>heap:&nbsp;<BR>需要程序员自己申请，并指明大小，在c中malloc函数&nbsp;<BR>如p1&nbsp;=&nbsp;(char&nbsp;*)malloc(10);&nbsp;<BR>在C++中用new运算符&nbsp;<BR>如p2&nbsp;=&nbsp;(char&nbsp;*)malloc(10);&nbsp;<BR>但是注意p1、p2本身是在栈中的。&nbsp;<BR><BR><BR>2.2&nbsp;<BR>申请后系统的响应&nbsp;<BR>栈：只要栈的剩余空间大于所申请空间，系统将为程序提供内存，否则将报异常提示栈溢出。&nbsp;<BR>堆：首先应该知道操作系统有一个记录空闲内存地址的链表，当系统收到程序的申请时，&nbsp;<BR>会遍历该链表，寻找第一个空间大于所申请空间的堆结点，然后将该结点从空闲结点链表中删除，并将该结点的空间分配给程序，另外，对于大多数系统，会在这块内存空间中的首地址处记录本次分配的大小，这样，代码中的delete语句才能正确的释放本内存空间。另外，由于找到的堆结点的大小不一定正好等于申请的大小，系统会自动的将多余的那部分重新放入空闲链表中。&nbsp;<BR><BR>2.3申请大小的限制&nbsp;<BR>栈：在Windows下,栈是向低地址扩展的数据结构，是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的，在WINDOWS下，栈的大小是2M（也有的说是1M，总之是一个编译时就确定的常数），如果申请的空间超过栈的剩余空间时，将提示overflow。因此，能从栈获得的空间较小。&nbsp;<BR>堆：堆是向高地址扩展的数据结构，是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的，自然是不连续的，而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见，堆获得的空间比较灵活，也比较大。&nbsp;<BR><BR><BR>2.4申请效率的比较：&nbsp;<BR>栈由系统自动分配，速度较快。但程序员是无法控制的。&nbsp;<BR>堆是由new分配的内存，一般速度比较慢，而且容易产生内存碎片,不过用起来最方便.&nbsp;<BR>另外，在WINDOWS下，最好的方式是用VirtualAlloc分配内存，他不是在堆，也不是在栈是直接在进程的地址空间中保留一快内存，虽然用起来最不方便。但是速度快，也最灵活。&nbsp;<BR><BR>2.5堆和栈中的存储内容&nbsp;<BR>栈：&nbsp;在函数调用时，第一个进栈的是主函数中后的下一条指令（函数调用语句的下一条可执行语句）的地址，然后是函数的各个参数，在大多数的C编译器中，参数是由右往左入栈的，然后是函数中的局部变量。注意静态变量是不入栈的。&nbsp;<BR>当本次函数调用结束后，局部变量先出栈，然后是参数，最后栈顶指针指向最开始存的地址，也就是主函数中的下一条指令，程序由该点继续运行。&nbsp;<BR>堆：一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。&nbsp;<BR><BR>2.6存取效率的比较&nbsp;<BR><BR>char&nbsp;s1[]&nbsp;=&nbsp;"aaaaaaaaaaaaaaa";&nbsp;<BR>char&nbsp;*s2&nbsp;=&nbsp;"bbbbbbbbbbbbbbbbb";&nbsp;<BR>aaaaaaaaaaa是在运行时刻赋值的；&nbsp;<BR>而bbbbbbbbbbb是在编译时就确定的；&nbsp;<BR>但是，在以后的存取中，在栈上的数组比指针所指向的字符串(例如堆)快。&nbsp;<BR>比如：&nbsp;<BR>＃i nclude&nbsp;<BR>void&nbsp;main()&nbsp;<BR>{&nbsp;<BR>char&nbsp;a&nbsp;=&nbsp;1;&nbsp;<BR>char&nbsp;c[]&nbsp;=&nbsp;"1234567890";&nbsp;<BR>char&nbsp;*p&nbsp;="1234567890";&nbsp;<BR>a&nbsp;=&nbsp;c[1];&nbsp;<BR>a&nbsp;=&nbsp;p[1];&nbsp;<BR>return;&nbsp;<BR>}&nbsp;<BR>对应的汇编代码&nbsp;<BR>10:&nbsp;a&nbsp;=&nbsp;c[1];&nbsp;<BR>00401067&nbsp;8A&nbsp;4D&nbsp;F1&nbsp;mov&nbsp;cl,byte&nbsp;ptr&nbsp;[ebp-0Fh]&nbsp;<BR>0040106A&nbsp;88&nbsp;4D&nbsp;FC&nbsp;mov&nbsp;byte&nbsp;ptr&nbsp;[ebp-4],cl&nbsp;<BR>11:&nbsp;a&nbsp;=&nbsp;p[1];&nbsp;<BR>0040106D&nbsp;8B&nbsp;55&nbsp;EC&nbsp;mov&nbsp;edx,dword&nbsp;ptr&nbsp;[ebp-14h]&nbsp;<BR>00401070&nbsp;8A&nbsp;42&nbsp;01&nbsp;mov&nbsp;al,byte&nbsp;ptr&nbsp;[edx+1]&nbsp;<BR>00401073&nbsp;88&nbsp;45&nbsp;FC&nbsp;mov&nbsp;byte&nbsp;ptr&nbsp;[ebp-4],al&nbsp;<BR>第一种在读取时直接就把字符串中的元素读到寄存器cl中，而第二种则要先把指针值读到edx中，在根据edx读取字符，显然慢了。&nbsp;<BR><BR><BR>2.7小结：&nbsp;<BR>堆和栈的区别可以用如下的比喻来看出：&nbsp;<BR>使用栈就象我们去饭馆里吃饭，只管点菜（发出申请）、付钱、和吃（使用），吃饱了就走，不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作，他的好处是快捷，但是自由度小。&nbsp;<BR>使用堆就象是自己动手做喜欢吃的菜肴，比较麻烦，但是比较符合自己的口味，而且自由度大。<img src ="http://www.blogjava.net/Timnity/aggbug/25939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Timnity/" target="_blank">Timnity</a> 2005-12-29 21:29 <a href="http://www.blogjava.net/Timnity/archive/2005/12/29/25939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>