middlegen生成pojo

          http://blog.csdn.net/itcareerist/article/details/5896143

          posted @ 2016-07-05 14:24 youngturk 閱讀(192) | 評論 (0)編輯 收藏

          MyBatis 需要研究

          http://www.cnblogs.com/xdp-gacl/p/4261895.html

          posted @ 2016-06-27 13:47 youngturk 閱讀(141) | 評論 (0)編輯 收藏

          ftp socket

          http://www.ibm.com/developerworks/cn/linux/l-cn-socketftp/

          posted @ 2016-06-27 12:45 youngturk 閱讀(124) | 評論 (0)編輯 收藏

          XML面試題

          http://blog.csdn.net/sweetsnow24/article/details/7447110 http://jingyan.baidu.com/article/b7001fe1738d9a0e7282dda6.html http://wenku.baidu.com/link?url=YjPcc8q-E9jnAEqsEJQZ7juMw8TICa0q9ppU3ICqEyQJBl4JGQynegQT03DQA0oyA-CxGAtDKJ_pvuvo3prfVeLEsxzC7VUWjWMsQVAxht_ 問題1:XML是什么?   答:XML即可擴(kuò)展標(biāo)記語言(Extensible Markup language),你可以根據(jù)自己的需要擴(kuò)展XML。XML中可以輕松定義, 等自定義標(biāo)簽,而在HTML等其他標(biāo)記語言中必須使用預(yù)定義的標(biāo)簽,比如

          ,而不能使用用戶定義的標(biāo)簽。使用DTD和XML Schema標(biāo)準(zhǔn)化XML結(jié)構(gòu)。XML主要用于從一個系統(tǒng)到另一系統(tǒng)的數(shù)據(jù)傳輸,比如企業(yè)級應(yīng)用的客戶端與服務(wù)端。   問題2:DTD與XML Schema有什么區(qū)別?   答:DTD與XML Schema有以下區(qū)別:DTD不使用XML編寫而XML Schema本身就是xml文件,這意味著XML解析器等已有的XML工具可以用來處理XML Schema。而且XML Schema 是設(shè)計于DTD之后的,它提供了更多的類型來映射xml文件不同的數(shù)據(jù)類型。DTD即文檔類型描述(Document Type definition)是定義XML文件結(jié)構(gòu)的傳統(tǒng)方式。   問題3:XPath是什么?   答:XPath是用于從XML文檔檢索元素的XML技術(shù)。XML文檔是結(jié)構(gòu)化的,因此XPath可以從XML文件定位和檢索元素、屬性或值。從數(shù)據(jù)檢索方面來說,XPath與SQL很相似,但是它有自己的語法和規(guī)則。   問題4:XSLT是什么?   答:XSLT也是常用的XML技術(shù),用于將一個XML文件轉(zhuǎn)換為另一種XML,HTML或者其他的格式。XSLT為轉(zhuǎn)換XML文件詳細(xì)定義了自己的語法,函數(shù)和操作符。通常由XSLT引擎完成轉(zhuǎn)換,XSLT引擎讀取XSLT語法編寫的XML樣式表或者XSL文件的指令。XSLT大量使用遞歸來執(zhí)行轉(zhuǎn)換。一個常見XSLT使用就是將XML文件中的數(shù)據(jù)作為HTML頁面顯示。XSLT也可以很方便地把一種XML文件轉(zhuǎn)換為另一種XML文檔。   問題5:什么是XML元素和屬性   答:最好舉個例子來解釋。下面是簡單的XML片斷。   Xml代碼         6758.T   2300         例子中id是元素的一個屬性,其他元素都沒有屬性。   問題6:什么是格式良好的XML   答:這個問題經(jīng)常在電話面試中出現(xiàn)。一個格式良好的XML意味著該XML文檔語法上是正確的,比如它有一個根元素,所有的開放標(biāo)簽合適地閉合,屬性值必須加引號等等。如果一個XML不是格式良好的,那么它可能不能被各種XML解析器正確地處理和解析。   問題7:XML命名空間是什么?它為什么很重要?   答:XML命名空間與Java的package類似,用來避免不同來源名稱相同的標(biāo)簽發(fā)生沖突。XML命名空間在XML文檔頂部使用xmlns屬性定義,語法為xmlns:prefix=’URI’。prefix與XML文檔中實際標(biāo)簽一起使用。下面例子為XML命名空間的使用。   Xml代碼      837363223         問題8:DOM和SAX解析器有什么區(qū)別   答:這又是一道常見面試題,不僅出現(xiàn)在XML面試題中,在Java面試中也會問到。DOM和SAX解析器的主要區(qū)別在于它們解析XML文檔的方式。使用DOM解析時,XML文檔以樹形結(jié)構(gòu)的形式加載到內(nèi)存中,而SAX是事件驅(qū)動的解析器。   問題9:XML CDATA是什么   答:這道題很簡單也很重要,但很多編程人員對它的了解并不深。CDATA是指字符數(shù)據(jù),它有特殊的指令被XML解析器解析。XML解析器解析XML文檔中所有的文本,比如This is name of person,標(biāo)簽的值也會被解析,因為標(biāo)簽值也可能包含XML標(biāo)簽,比如First Name。CDATA部分不會被XML解析器解析。   問題10:Java的XML數(shù)據(jù)綁定是什么   答:Java的XML綁定指從XML文件中創(chuàng)建類和對象,使用Java編程語言修改XML文檔。XML綁定的Java API,JAXB提供了綁定XML文檔和Java對象的便利方式。另一個可選的XML綁定方法是使用開源庫,比如XML Beans。Java中XML綁定的一個最大的優(yōu)勢就是利用Java編程能力創(chuàng)建和修改XML文檔。   以上的XML面試問答題收集自很多編程人員,但它們對于使用XML技術(shù)的每個人都是有用的。由于XML具有平臺獨(dú)立的特性,XPath,XSLT,XQuery等XML技術(shù)越來越重要。盡管XML有冗余和文檔體積大等缺點(diǎn),但它在web服務(wù)以及帶寬、速率作為次要考慮因素的系統(tǒng)間數(shù)據(jù)傳輸起很大作用,被廣泛用于跨平臺數(shù)據(jù)傳輸。

          posted @ 2016-06-24 16:41 youngturk 閱讀(173) | 評論 (0)編輯 收藏

          SQL SERVER 的用戶數(shù),連接,連接池 license

          http://www.cnblogs.com/qanholas/p/3904833.html SQL SERVER 理論上有32767個邏輯連接,SQL SERVER根據(jù)系統(tǒng)自行調(diào)配連接池。 首先 ,操作系統(tǒng)的用戶數(shù):即同時通過網(wǎng)絡(luò)連接到這臺電腦上面的用戶限制,以5用戶操作系統(tǒng),搭建的文件服務(wù)器為例,去同時訪問這個文件服務(wù)器的網(wǎng)絡(luò)用戶為5個。 下面說說SQL server,購買數(shù)據(jù)庫有兩種方式,1、根據(jù)用戶數(shù)購買。2、根據(jù)cpu個數(shù)購買。 根據(jù)用戶數(shù)購買,假如你購買了一個50用戶的數(shù)據(jù)庫,那么可以通過網(wǎng)絡(luò)訪問數(shù)據(jù)庫的人數(shù)限制為50。 根據(jù)cpu個數(shù)購買的數(shù)據(jù)庫訪問人數(shù)不受限制,服務(wù)器上面有幾顆cpu就要買幾個授權(quán)的SQL server,但是如果你只買一個授權(quán)的話數(shù)據(jù)庫也可以正常運(yùn)行,但是微軟認(rèn)為你的數(shù)據(jù)庫不合法。就如同盜版系統(tǒng)。 一個連接不等于一個用戶,單獨(dú)一個用戶可以有超過一個的連接,單獨(dú)一個連接可以有超過一個用戶。 你可以運(yùn)行里面輸入perfmon,然后加入下面兩個計數(shù)器進(jìn)行對比 SQLServer: General Statistics — Logical Connections:與系統(tǒng)建立的邏輯連接數(shù)。SQLServer: General Statistics — User Connections:連接到系統(tǒng)的用戶數(shù)。 打個比喻 sql server是你家的房子 用戶數(shù) 是你家房子鑰匙 連接數(shù) 是你家房子能進(jìn)去的人 不是很恰當(dāng),但是基本能說明問題 一個房子有多少個鑰匙是明確的,但是每個鑰匙是可以讓多個人進(jìn)去 也就是說,sql server的用戶是可以登陸sql server進(jìn)行操作的,而連接數(shù)指的是使用某個用戶名登陸的為了執(zhí)行某個具體操作的一個連接。 通常一個SQL SERVER 查詢器,一個ADOCONNECTION是一個連接。 在SQL Server里查看當(dāng)前連接的在線用戶數(shù) use master select loginame,count(0) from sysprocesses group by loginame order by count(0) desc select nt_username,count(0) from sysprocesses group by nt_username order by count(0) desc 如果某個SQL Server用戶名test連接比較多,查看它來自的主機(jī)名: select hostname,count(0) from sysprocesses where loginame='test' group by hostname order by count(0) desc 如果某個SQL Server用戶名test連接比較多,查看它最后一次操作的時間范圍分組: select convert(varchar,last_batch,111),count(0) from sysprocesses where loginame='test' group by convert(varchar,last_batch,111) order by count(0) desc 如果從主機(jī)(www)來的連接比較多,可以查看它的進(jìn)程詳細(xì)情況 select * from??sysprocesses where hostname='www' 如果www機(jī)器主要提供網(wǎng)頁服務(wù),可能是asp程序處理連接時出了問題, 生成殺這些進(jìn)程的SQL語句: select 'kill '+convert(varchar,spid) from sysprocesses where hostname='www' 如果這樣的問題頻繁出現(xiàn),可以寫一個存儲過程sp_KillIdleSpids.sql, 寫一個作業(yè), 執(zhí)行它, 來自動殺掉從主機(jī)(www)來但已經(jīng)一天沒有響應(yīng)的用戶連接. ? ? ? -------------------------------- SQL Server的用戶及權(quán)限? ?sysadmin 可以在 SQL Server 中執(zhí)行任何活動? serveradmin 可以設(shè)置服務(wù)器范圍的配置選項 關(guān)閉服務(wù)器? setupadmin 可以管理鏈接服務(wù)器和啟動過程? securityadmin 可以管理登錄和 CREATE DATABASE 權(quán)限 還可以讀取錯誤日志和更改密碼? processadmin 可以管理在 SQL Server 中運(yùn)行的進(jìn)程? dbcreator 可以創(chuàng)建 更改和除去數(shù)據(jù)庫? diskadmin 可以管理磁盤文件? bulkadmin 可以執(zhí)行 BULK INSERT 語句? ...... 最大連接數(shù)是指數(shù)據(jù)庫能承受的最大并發(fā)訪問數(shù)量 SQL Server的并發(fā)用戶數(shù)或者license怎么理解? 華軟論壇 2005-12-06 13:38:55 在 MS-SQL Server / 基礎(chǔ)類 提問 盜版的有并發(fā)用戶數(shù)的限制嗎?正版好像有10用戶,50用戶的版本,如果用C/S架構(gòu)的話,每個客戶端連接算不算一個用戶? 后來有段時間好像改到 只按CPU購買License了。現(xiàn)在又好像見到購買連接數(shù)的license. 講了這么一堆,想告訴你的是,如果你只有10用戶的License,其實也是沒有限制的。這是微軟的市場人員親口告訴我的。 [華 軟 網(wǎng)] 歡迎轉(zhuǎn)載,但請保留出處,本文章轉(zhuǎn)自[華軟網(wǎng)] 原文鏈接:http://www.huarw.com/db/dbbbs/MSSQLServer/200512/735120.html 你指的是購買許可吧? SQL 提供3種購買方式 1) Processor license. (按CPU購買) 要求為運(yùn)行SQL Server 2000的操作系統(tǒng)上的每個CPU購買許可. 這種方式不需要購買客戶端訪問許可. 2) Server plus device CALs. (服務(wù)器許可加每設(shè)備客戶端訪問許可) 運(yùn)行SQL Server 2000的服務(wù)器需要一個許可, 每個訪問SQL Server 2000的設(shè)備需要一個客戶端訪問許可. 3) Server plus user CALs. (服務(wù)器許可加每用戶客戶端訪問許可) 運(yùn)行SQL Server 2000的服務(wù)器需要一個許可, 每個訪問SQL Server 2000的用戶需要一個客戶端訪問許可 2、每客戶 每客戶授權(quán)模式要求每個將訪問 SQL Server 2000 服務(wù)器的設(shè)備都具有一個客戶端訪問許可證。對于客戶端連接到不止一個服務(wù)器的網(wǎng)絡(luò),每客戶模式通常更劃算。 在編輯框中,選擇要授權(quán)的設(shè)備數(shù)。 選擇授權(quán)模式: 使用該對話框設(shè)置授權(quán)模式,以使客戶端可以訪問 Microsoft? SQL Server? 的該實例。SQL Server 2000 支持兩種客戶端訪問授權(quán)模式,一個用于設(shè)備,另一個用于處理器。 設(shè)備可以是工作站、終端或運(yùn)行連接到 SQL Server 實例的 SQL Server 應(yīng)用程序的任何其它設(shè)備。 處理器指的是安裝在運(yùn)行 SQL Server 2000 實例的計算機(jī)上的中央處理器 (CPU)。一個計算機(jī)上可以安裝多個處理器,從而需要多個處理器許可證。 一旦設(shè)置了授權(quán)模式便無法再更改。可以在安裝 SQL Server 之后添加設(shè)備或處理器許可證,這使用 "控制面板 "中的 SQL Server 2000 授權(quán)安裝實用工具來進(jìn)行。 1、授權(quán)模式 當(dāng)從 "控制面板 "訪問該對話框時,安裝過程中選擇的模式在默認(rèn)情況下為選中,同時顯示以前選擇的設(shè)備數(shù)或處理器數(shù)。 2、每客戶 每客戶授權(quán)模式要求每個將訪問 SQL Server 2000 服務(wù)器的設(shè)備都具有一個客戶端訪問許可證。對于客戶端連接到不止一個服務(wù)器的網(wǎng)絡(luò),每客戶模式通常更劃算。 在編輯框中,選擇要授權(quán)的設(shè)備數(shù)。 3、處理器許可證 使用處理器許可,安裝在運(yùn)行 SQL Server 的計算機(jī)上的每個處理器都需要一個許可證。處理器許可證允許任意數(shù)目的設(shè)備訪問服務(wù)器,無論它們是通過 Intranet 還是 Internet。 使用處理器許可,SQL Server 2000 可以利用每個安裝的處理器,并支持不限數(shù)目的客戶端設(shè)備。通過 Internet 提供對 SQL Server 數(shù)據(jù)庫的訪問的客戶或擁有大量用戶的客戶通常選擇處理器許可證。 在編輯框中選擇要授權(quán)的處理器數(shù)。 SQL Server安裝成功后,重起計算機(jī)后SQL Server自動啟動服務(wù)。 10用戶不是指的連接用戶 在創(chuàng)建自定義控制臺時,可以給控制臺指派兩種常用訪問選項中的一種:作者模式或用戶模式。依次有三個級別的用戶模式,因此共有四種默認(rèn)訪問控制臺的選項: 作者模式 用戶模式-完全訪問 用戶模式-受限訪問,多窗口 用戶模式-受限訪問,單窗口 你安裝的是企業(yè)版,10個客戶端是指你能夠在別的機(jī)子上只能安裝10個Sql客戶端同它連接

          posted @ 2016-06-24 15:00 youngturk 閱讀(511) | 評論 (0)編輯 收藏

          三分鐘讓你看懂java網(wǎng)絡(luò)通信

          http://i-lolo.iteye.com/blog/1611562 在進(jìn)入網(wǎng)絡(luò)通信之前,讓我們來普及一點(diǎn)網(wǎng)絡(luò)基礎(chǔ)概念。如果你是有一定的計算機(jī)網(wǎng)絡(luò)基礎(chǔ),請直接跳到第五點(diǎn)之后開始閱讀。 第一、 什么是計算機(jī)網(wǎng)絡(luò)? 書本上那些文縐縐的概念我們可以不去理,我告訴你,我們兩臺電腦連在一起就組成了一個計算機(jī)網(wǎng)絡(luò)。其實我們的電腦甚至是全世界的電腦都是連著的,只要你的電腦連著網(wǎng),你就在這個巨大的計算機(jī)網(wǎng)絡(luò)里,你也許會問為什么我和他們是連著的啊?大家知道自己是怎么上的網(wǎng)?ADSL是吧,撥號上網(wǎng)。換個比方說吧,我們在公司我們的電腦通過網(wǎng)線,雙絞線,然后是Hub(集線器),連接到胡哥的電腦,然后胡哥的機(jī)子通過撥號,ADSL,連到電信的網(wǎng)關(guān)那兒,然后中國電信通過海底光纜和美國電信網(wǎng)關(guān)連接,然后再像剛剛我們連接中國電信一樣,逆推過去,連接到美國每一臺聯(lián)網(wǎng)的計算機(jī)。所以說只要你連著網(wǎng),你就是和全世界的在線用戶連著。這是一個巨大的計算機(jī)網(wǎng)絡(luò)。非常巨大。 第二、 計算機(jī)網(wǎng)絡(luò)的主要功能? 資源共享、信息傳輸與集中處理、均衡負(fù)荷與分布處理、綜合信息服務(wù)(www/綜合數(shù)字網(wǎng)絡(luò) ISDN)。這些個功能,不多說。這些你不平時都在用么?你的資源能夠上傳共享給其他人,有的人平時還很喜歡聊QQ,是吧,所以上面說的這四個也許還有更多的什么功能都是些冠冕堂皇的話,稍微看下就好。用了自然就曉得了。 第三、 什么是網(wǎng)絡(luò)通信協(xié)議? 我來問你,為什么你說話身邊的人能夠聽的懂,別人說的話你為什么也能夠聽懂,而為什么如果你去對一個外國人說話或者一個外國人來和你說話你們卻互相聽不懂呢?你會說廢話嘛因為我說的是中文,是漢語,中國人說的都是漢語,而外國人說的是另一種語言,是外語。就是這樣,網(wǎng)絡(luò)通信協(xié)議就像我們的中文一樣,她就是我們之間的共同語言,他規(guī)定了我們之間怎么說話,我先說什么你再說什么,你怎么說,而我應(yīng)該怎么聽。而網(wǎng)絡(luò)通信得先規(guī)定約定一些俗成的網(wǎng)絡(luò)通信協(xié)議,先說好,兩臺計算機(jī)之間什么收發(fā)信息,信息格式是什么,信息怎么發(fā),怎么接收,而萬一出錯怎么辦怎么處理。沒有了這個協(xié)議,兩臺電腦就不知道互相之間怎么說話,就像你對一頭大母豬說完愛你,而人家根本就不知道你在說什么。 在這兒和大家提一下網(wǎng)絡(luò)協(xié)議的分層思想。學(xué)過計算機(jī)網(wǎng)絡(luò)的同學(xué)都知道有兩種基本的國際標(biāo)準(zhǔn)分層模型,一個是OSI參考模型,一個是TCP/IP參考模型。OSI參考模型,是國際標(biāo)準(zhǔn)化組織搞出來的開放互聯(lián)傳統(tǒng)模型,一共有七層:物理/數(shù)據(jù)鏈路/網(wǎng)絡(luò)/傳輸/會話/表示/應(yīng)用。學(xué)網(wǎng)絡(luò)和硬件的一般都要熟悉這七層標(biāo)準(zhǔn),至于這七層都是干嘛的,大家自己問度娘或者自己看關(guān)于網(wǎng)絡(luò)的書去。(中南大學(xué)高陽教授主編了一本叫《計算機(jī)網(wǎng)絡(luò)原理與實用技術(shù)》的書,里邊很詳盡的介紹了這個OSI參考模型,沒記錯的話應(yīng)該是在第一章1.4.5里,是放在TCP/IP協(xié)議之后的……)這里就不多說了,因為對于咱們編程的軟件人員來說,實際當(dāng)中的應(yīng)用,是分為四層,也就是TCP/IP參考模型。最底層物理+數(shù)據(jù)鏈路層/網(wǎng)絡(luò)層/傳輸層/應(yīng)用層。我們編的程序是位于應(yīng)用層,所以說,我們一直是在和哪一層打交道?TCP/IP層。我們編寫一個程序發(fā)送一些數(shù)據(jù),發(fā)給傳輸層,TCP/IP層,在這一層對數(shù)據(jù)進(jìn)行封裝,按照先前約定的協(xié)議,然后走向下一層,通過網(wǎng)線,再走到物理數(shù)據(jù)鏈路層,這時候數(shù)據(jù)就變成了一連串的01010101,到達(dá)對面之后逆推上面的過程,進(jìn)行解封,ok,信息發(fā)送完畢。這兒涉及到比較多的網(wǎng)絡(luò)底層,目前我們不需要過多了解,因為我們要做的工作不需要了解牽扯到到這么底層的東西,如果你想深入了解或者今后你想做殺毒軟件什么的,去讀《TCP/IP詳解》。 第四、 IP——(Internet Protocol網(wǎng)絡(luò)之間互連的協(xié)議)? 你不用管其他的,你只需要知道IP這個東西給我們做出的最大貢獻(xiàn),就是給我們每一臺電腦提供了一個獨(dú)一無二的IP地址。你想我的機(jī)器要和你的機(jī)器交流說話,我得知道你的機(jī)器叫什么,你的機(jī)器得有一個獨(dú)一無二的區(qū)別標(biāo)識,否則的話我就不知道傳的信息有沒有傳到你那兒,也不知道這信息到底傳給誰。IP地址這東西我們都知道吧?像我的本機(jī)IP: 113.240.187.242 這是湖南省長沙市的IP。他是由四個字節(jié)組成的(也就是說每一個值不能超過255)。(這個是IPV4,能夠組成將近四億多地址,現(xiàn)在已經(jīng)出來了IPV6,高檔貨,八個字節(jié),地址數(shù)是IPV4的幾何倍數(shù))IPV4的IP地址按照其網(wǎng)絡(luò)IP段和主機(jī)IP段占的字節(jié)數(shù)分ABC三類網(wǎng)。這個這里不說,大家自己去了解,好吧?拿高陽教授的那本書翻翻。順帶看看子網(wǎng)掩碼啊網(wǎng)關(guān)啊什么的。自己去了解。在這兒我就累得給你敲了。 第五、 TCP協(xié)議和UDP協(xié)議? 好了,上一步里我們通過獨(dú)一無二的IP地址找到了對方連在了一起。我們可以通話了,關(guān)于通話我們有兩種方式: 第一、 TCP協(xié)議,什么叫TCP協(xié)議?Transmission Control Protocol 傳輸控制協(xié)議TCP是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層(Transport layer)通信協(xié)議。什么叫可靠的?打個比方,我們打電話,上一步通過IP找到對方就相當(dāng)于撥號打通了你的電話,你拿起電話接了,我說一句“喂?”,如果你這邊不回應(yīng),我就會杵這兒一直“喂”下去,是不?因為不知道你那邊到底接到了聽到了我的話沒有,所以你這邊一定要告訴我你聽到了你收到了我剛剛的那句信息,我才會接著給你說下面的話給你發(fā)下面的數(shù)據(jù)。我每發(fā)一次信息我要你給我確認(rèn)收到了,然后我再給你發(fā)接下來的東西,這個就叫可靠。在TCP/IP協(xié)議里邊這叫“三次握手”機(jī)制。怎么握手,握手是怎么回事,問度娘,好吧? 第二、 UDP協(xié)議。User Datagram Protocol的簡稱, 中文名是用戶數(shù)據(jù)報協(xié)議,是 OSI 參考模型中一種無連接的傳輸層協(xié)議。UDP這種方式相對于TCP來說更加簡單。UDP說話就是,我給你說一句話,你聽沒聽到我不管。就像發(fā)電報,“黃河黃河我是長江!”哐當(dāng)一下就發(fā)出去了。不管黃河收到?jīng)]有。兩種方式一種安全可靠但是慢,一種簡單快捷但是不可靠。根據(jù)不同的需求選擇。像我們平時聊QQ開視頻啊什么的,用的就是UDP,因為我們傳輸?shù)倪@些個數(shù)據(jù)丟個一兩個包什么的無所謂,頂多就是視頻多了幾個馬賽克,是吧。那么平時我們玩的網(wǎng)絡(luò)游戲,像CF啊魔獸世界啊,是哪一種呢?自己想,好吧? 第三、 中南-馬志丹 http://java-mzd.javaeye.com 驚喜看得到! 基礎(chǔ)普及完了,接下來我們來看看為什么要去做網(wǎng)絡(luò)通信。這一段我就簡單點(diǎn)說。在計算機(jī)剛出來那會兒 ,那時候的人們都覺得計算機(jī)這東西就是主要為計算而存在的就是一個計算工具,但是自從1983年起,TCP\IP協(xié)議的出現(xiàn),讓計算機(jī)從此轉(zhuǎn)變?yōu)榱巳藗兊囊粋€交流工具。自那以后,只要你有一臺電腦,不管你是開網(wǎng)頁看電影,還是上人人找朋友,不管你是登郵箱收發(fā)郵件,還是登QQ聊天,你的生活的方方面面都離不開那電腦屏幕后邊的網(wǎng)絡(luò)技術(shù)。換句話說,如果沒有了網(wǎng)絡(luò)通信技術(shù),電腦以及大多數(shù)軟件將會失去他們原有的生命力。就像一棵大樹沒有根。沒有網(wǎng)絡(luò)通信就沒有如今繁榮的QQ世界,沒有了網(wǎng)絡(luò)通信,世界上那些個IT巨頭諸如IBM諸如谷歌,將會如斷線風(fēng)箏落日殘陽。我想說,如果你不懂網(wǎng)絡(luò)通信技術(shù),你就不是一個合格的程序員,如果你不精通網(wǎng)絡(luò)通信技術(shù),你就無法開發(fā)出一款真正優(yōu)秀的營運(yùn)軟件!除非你想永遠(yuǎn)停留在枯燥的單機(jī)時代,你想讓自己的技術(shù)永遠(yuǎn)留在表層。 現(xiàn)在,讓我們來考慮如何實現(xiàn)。 在做實現(xiàn)之前,我想先讓大家明白幾個概念: 1) Socket A. 兩個Java應(yīng)用程序可通過一個雙向的網(wǎng)絡(luò)通信連接實現(xiàn)數(shù)據(jù)交換,這個雙向鏈路的一端稱為一個Socket B. Socket通常用來實現(xiàn)client-server連接 C. Java.net包中定義的兩個類Socket和ServerSocket,分別用來實現(xiàn)雙向連接的client和server端 D. 建立連接時所需要的尋址信息為遠(yuǎn)程計算機(jī)的IP地址和端口號(Port number) 上面我們提到了IP地址,那是每一臺電腦獨(dú)一無二的一個地址標(biāo)識,是為了對方計算機(jī)能夠找得到你給你發(fā)信息。建立連接我們很顯然需要這個信息才能夠完成。那么這個端口號又是用來干什么的呢?舉個例子,假如說我電腦上現(xiàn)在上著人人和QQ,你的電腦上也是上著人人和QQ,如果我用QQ給你發(fā)一條消息他怎么知道就發(fā)到你的QQ上而不會在你的人人上呢?是吧?所以說光用IP地址是無法區(qū)分到不同的應(yīng)用程序的。所以需要端口號來達(dá)到這個作用。端口號在計算機(jī)內(nèi)部是用兩個字節(jié)來表示,也就是說總共有65536個端口。在這兒需要注意下面兩個點(diǎn): ?1.1024之前的端口我們自己編的程序不要征用它,因為這些端口是給系統(tǒng)用的。比如說80端口,胡哥給咱們講過的。干嘛的?負(fù)責(zé)處理HTTP上網(wǎng)訪問網(wǎng)頁等等的端口。還有就是21端口,F(xiàn)TP的,是吧?還有其他的一些著名端口,想知道問度娘去,好吧?在這里就不羅嗦了。 ?2.TCP端口和UDP端口是分開的,比如說TCP有個8888端口,他和你的UDP8888端口是不一樣的。 ?3.上述每一類有65536個端口。也就是說我們的計算機(jī)能夠運(yùn)行131072個程序,只要你電腦吃得消。 既然要實現(xiàn)通信,那我們肯定要確定兩個通信對象,一個是服務(wù)器對象server,一個是客戶端對象client。我們需要知道,這兩個對象是兩個應(yīng)用程序,他們的對話,是兩個不同的程序之間的對話。你會說我只有兩個對象也還沒法實現(xiàn)他們之間的交互啊,不用急,我也知道他們兩個不是神仙會心有靈犀。兩個對象之間想要實現(xiàn)互相之間的信息交互,就必須要有一個通道。這個通道就像是一根管子,一頭扎在服務(wù)器端,一頭插在客戶端。信息就在這根管子里來來往往。這根管子怎么插呢,插在哪兒呢?這個時候就需要用到剛剛提到的Socket了。 Socket的意思呢就是一個插座,服務(wù)器和客戶端各有一個插座,安插在各自的一個端口上,管子插在這兩個插座上,然后在他們這兩個端口上接入數(shù)據(jù)流。Socket通常用來實現(xiàn)server-client連接。Java里面有一個包java.net,他下邊有定義了兩個類,Socket和ServerSocket,分別用來實現(xiàn)雙向連接的server端和client端。 接下來我們來建立TCP服務(wù)器端和客戶端。 服務(wù)器端:我們用的是ServerSocket,新建一個server插座,并且交給他一個端口號,這個插座他有一個非常方便的構(gòu)造方法ServerSocket(int port),讓他知道自己監(jiān)聽哪一個端口,然后新建一個socket對象,開機(jī),并用.accept語句讓他處在待機(jī)狀態(tài),等待接受client的接入。一旦有客戶端接入就將它賦給新建的Socket對象,并且用.getInputStream以及.getOutputStream命令獲得他的輸入輸出流。這個流,就是一根管子,信息都在這根管子里流通。這樣說東西不怎么好說,那么我們就在這個流上面再包一層,將這個流封裝成DataOutputStream(),DataInputStream。然后就可以利用輸出流(這個是相對于服務(wù)器來說,這個輸出流到了客戶端就成了輸入流了)來.write信息,利用輸入流來.read()獲取客戶端發(fā)來的信息。Ok,接收完了,.close關(guān)閉輸入輸出流,以及關(guān)閉socket,關(guān)機(jī)。 客戶端:寫法和服務(wù)器端有點(diǎn)類似,新建一個插座,這兒需要留意的是,客戶端需要用到的插座是Socket而不是ServerSocket,新建一個Socket牌插座,同樣用他的Socket(String host,int port)構(gòu)造方法方法給他一個IP地址和端口號,讓它撥打區(qū)號以及具體電話號,這個和服務(wù)器端的IP地址以及端口號要一致,ok,這個時候server就相當(dāng)于申請連接到服務(wù)器的某一個端口上了。兩個程序就等于是連接上了。但是有些人就會問了啊,這只是客戶端申請連接,人家服務(wù)器接不接受呢。好,前面我們的服務(wù)器不是提到了.accept么,這個方法就是用來接受客戶端的,這個時候就是:你申請連接,我接受連接,接下來,照著上面服務(wù)器一樣,客戶端也獲取到自己的輸入輸出流,封裝,用輸出流寫出信息。咱們之間就可以互相通信了。還有一個問題啊,要是如果有另一個客戶端接入了呢?簡單,那就再.accept一下。如果有N多客戶端接入,那就不斷的.accept,不斷循環(huán)它。這個問題大家都知道可以用while語句。 具體的敲法,請看我給大家附上的代碼實現(xiàn)。下面給大家看下Socket通信模型。看著這個模型,再回頭看看上面給大家嘮叨的那些個點(diǎn),我想大家都知道服務(wù)器和客戶端該怎么去寫怎么去實現(xiàn)通信了吧? 好了,這一段“三分鐘讓你看懂”到此就結(jié)束了,想來大家對網(wǎng)絡(luò)通信也該有了一個相對清晰的認(rèn)識。如果你還想了解學(xué)習(xí)更多的網(wǎng)絡(luò)通信方面的知識,如果你還想知道如何去實現(xiàn)一些更多的通信功能,比如建立公共聊天室實現(xiàn)群聊,又比如建立一個以互聯(lián)網(wǎng)為基礎(chǔ)的以網(wǎng)絡(luò)畫板為主體的協(xié)助平臺,又比如,你想做一個自己的軟件來實現(xiàn)像QQ一樣MSN一樣或者像人人桌面一樣的各種功能……請繼續(xù)關(guān)注我們的隨后更新。請記住,我們是ZCL,我們是一群簡單快樂的牧碼人! 后記:第一篇正兒八經(jīng)的技術(shù)日志,4K多全手打,這樣說起來應(yīng)該蠻自豪的感覺。但是說實話還是覺得自己寫的有些亂。自己只是把課堂上老師們講的一些知識點(diǎn),根據(jù)自己敲的代碼以及做了的一些課堂筆記,羅列了出來。也查了一些在線資料和書籍,像度娘,像學(xué)校發(fā)的那本我都沒怎么動過的《計算機(jī)網(wǎng)絡(luò)原理和實用技術(shù)》。在前面花了好些篇幅來講計算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識,是因為我給自己定下的目標(biāo)就是讓任何一個人甚至你是沒怎么學(xué)過接觸過java或者計算機(jī)網(wǎng)絡(luò)這一塊,看了我的博客之后,都能夠?qū)W(wǎng)絡(luò)通信有一個比較清晰的認(rèn)識,而讓接觸過java的人知道怎么樣初步的去實現(xiàn)兩個軟件或者說程序之間的通信,知道他們之間是怎么回事兒并且自己動手實現(xiàn)它。這確實是一個有點(diǎn)難度的過程。但是你如果把這個都搞定了,那么,你的java網(wǎng)絡(luò)通信就基本可以說入了一個門了。我似乎聽見了胡哥用他那一慣的口吻在我身后說,這種程度,要說入門還早的很呢!當(dāng)然咯,就算我現(xiàn)在做到網(wǎng)絡(luò)畫圖板做到網(wǎng)絡(luò)文件傳輸,也感覺自己只是進(jìn)了一個門,門后的世界無比之大,等待我們不斷的去探索,去創(chuàng)新,去創(chuàng)造它。生命有限,學(xué)海無涯;人有老時,學(xué)無止境嘛。發(fā)現(xiàn)的問題蠻多。但獲得的收獲也不少。果然檢驗自己是否學(xué)會掌握一個東西的最好辦法就是嘗試著去教給別人。只有你能夠很清晰的把事兒給別人說清楚了教會了,你才能說自己懂了。寫完這篇博客,感覺自己對網(wǎng)絡(luò)通信的理解又加深了一些,對其中的一些知識點(diǎn)的掌握也更加牢靠了一些。只言片語薄聞淺見,希望大家多多批評不吝賜教! 最后的最后:用胡哥的一句話來與君共勉吧! 標(biāo)準(zhǔn)即平庸,合格即廢物。 (附)服務(wù)器端代碼: Java代碼 收藏代碼 package con120722; import java.net.*; import java.io.*; public class Server { private ServerSocket ss; private Socket socket; private BufferedReader in; private PrintWriter out; public Server() { try { ss = new ServerSocket(10000); while (true) { socket = ss.accept(); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(),true); String line = in.readLine(); out.println("you input is :" + line); out.close(); in.close(); socket.close(); } } catch (IOException e) {} } public static void main(String[] args) { new Server(); } } 客戶端代碼: Java代碼 收藏代碼 package con120722; Java代碼 收藏代碼 import java.io.*; import java.net.*; public class Client { Socket socket; BufferedReader in; PrintWriter out; public Client() { try { socket = new Socket("localhost", 10000); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(),true); BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); out.println(line.readLine()); line.close(); out.close(); in.close(); socket.close(); } catch (IOException e) {} } public static void main(String[] args) { new Client(); } }

          posted @ 2016-06-23 10:02 youngturk 閱讀(249) | 評論 (0)編輯 收藏

          Xms Xmx PermSize MaxPermSize 區(qū)別 java 內(nèi)存

          http://www.cnblogs.com/mingforyou/archive/2012/03/03/2378143.html http://www.educity.cn/wenda/450855.html Eclipse崩潰,錯誤提示: MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommended that you exit and restart MyEclipse with new virtual machine memory paramters to increase this memory. Failure to do so can result in data loss. The recommended Eclipse memory parameters are: eclipse.exe -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M 1.參數(shù)的含義 -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M -vmargs 說明后面是VM的參數(shù),所以后面的其實都是JVM的參數(shù)了 -Xms128m JVM初始分配的堆內(nèi)存 -Xmx512m JVM最大允許分配的堆內(nèi)存,按需分配 -XX:PermSize=64M JVM初始分配的非堆內(nèi)存 -XX:MaxPermSize=128M JVM最大允許分配的非堆內(nèi)存,按需分配 我們首先了解一下JVM內(nèi)存管理的機(jī)制,然后再解釋每個參數(shù)代表的含義。 1)堆(Heap)和非堆(Non-heap)內(nèi)存 按照官方的說法:“Java 虛擬機(jī)具有一個堆,堆是運(yùn)行時數(shù)據(jù)區(qū)域,所有類實例和數(shù)組的內(nèi)存均從此處分配。堆是在 Java 虛擬機(jī)啟動時創(chuàng)建的。”“在JVM中堆之外的內(nèi)存稱為非堆內(nèi)存(Non-heap memory)”。 可以看出JVM主要管理兩種類型的內(nèi)存:堆和非堆。簡單來說堆就是Java代碼可及的內(nèi)存,是留給開發(fā)人員使用的;非堆就是JVM留給自己用的, 所以方法區(qū)、JVM內(nèi)部處理或優(yōu)化所需的內(nèi)存(如JIT編譯后的代碼緩存)、每個類結(jié)構(gòu)(如運(yùn)行時常數(shù)池、字段和方法數(shù)據(jù))以及方法和構(gòu)造方法的代碼都在非堆內(nèi)存中。 堆內(nèi)存分配 JVM初始分配的堆內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64;JVM最大分配的堆內(nèi)存由-Xmx指定,默認(rèn)是物理內(nèi)存的1/4。默認(rèn)空余堆內(nèi)存小于40%時,JVM就會增大堆直到-Xmx的最大限制; 空余堆內(nèi)存大于70%時,JVM會減少堆直到-Xms的最小限制。因此服務(wù)器一般設(shè)置-Xms、-Xmx 相等以避免在每次GC 后調(diào)整堆的大小。 說明:如果-Xmx 不指定或者指定偏小,應(yīng)用可能會導(dǎo)致java.lang.OutOfMemory錯誤,此錯誤來自JVM,不是Throwable的,無法用try...catch捕捉。 非堆內(nèi)存分配 JVM使用-XX:PermSize設(shè)置非堆內(nèi)存初始值,默認(rèn)是物理內(nèi)存的1/64;由XX:MaxPermSize設(shè)置最大非堆內(nèi)存的大小,默認(rèn)是物理內(nèi)存的1/4。(還有一說:MaxPermSize缺省值和-server -client選項相關(guān), -server選項下默認(rèn)MaxPermSize為64m,-client選項下默認(rèn)MaxPermSize為32m。這個我沒有實驗。) 上面錯誤信息中的PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域。還沒有弄明白PermGen space是屬于非堆內(nèi)存,還是就是非堆內(nèi)存,但至少是屬于了。 XX:MaxPermSize設(shè)置過小會導(dǎo)致java.lang.OutOfMemoryError: PermGen space 就是內(nèi)存益出。 說說為什么會內(nèi)存益出: (1)這一部分內(nèi)存用于存放Class和Meta的信息,Class在被 Load的時候被放入PermGen space區(qū)域,它和存放Instance的Heap區(qū)域不同。 (2)GC(Garbage Collection)不會在主程序運(yùn)行期對PermGen space進(jìn)行清理,所以如果你的APP會LOAD很多CLASS 的話,就很可能出現(xiàn)PermGen space錯誤。 這種錯誤常見在web服務(wù)器對JSP進(jìn)行pre compile的時候。 2)JVM內(nèi)存限制(最大值) 首先JVM內(nèi)存限制于實際的最大物理內(nèi)存,假設(shè)物理內(nèi)存無限大的話,JVM內(nèi)存的最大值跟操作系統(tǒng)有很大的關(guān)系。簡單的說就32位處理器雖然可控內(nèi)存空間有4GB,但是具體的操作系統(tǒng)會給一個限制, 這個限制一般是2GB-3GB(一般來說Windows系統(tǒng)下為1.5G-2G,Linux系統(tǒng)下為2G-3G),而64bit以上的處理器就不會有限制了。 2. 為什么有的機(jī)器我將-Xmx和-XX:MaxPermSize都設(shè)置為512M之后Eclipse可以啟動,而有些機(jī)器無法啟動? 通過上面對JVM內(nèi)存管理的介紹我們已經(jīng)了解到JVM內(nèi)存包含兩種:堆內(nèi)存和非堆內(nèi)存,另外JVM最大內(nèi)存首先取決于實際的物理內(nèi)存和操作系統(tǒng)。所以說設(shè)置VM參數(shù)導(dǎo)致程序無法啟動主要有以下幾種原因: 1) 參數(shù)中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize; 2) -Xmx的值和-XX:MaxPermSize的總和超過了JVM內(nèi)存的最大限制,比如當(dāng)前操作系統(tǒng)最大內(nèi)存限制,或者實際的物理內(nèi)存等等。說到實際物理內(nèi)存這里需要說明一點(diǎn)的是, 如果你的內(nèi)存是1024MB,但實際系統(tǒng)中用到的并不可能是1024MB,因為有一部分被硬件占用了。 3. 為何將上面的參數(shù)寫入到eclipse.ini文件Eclipse沒有執(zhí)行對應(yīng)的設(shè)置? 那為什么同樣的參數(shù)在快捷方式或者命令行中有效而在eclipse.ini文件中是無效的呢?這是因為我們沒有遵守eclipse.ini文件的設(shè)置規(guī)則: 參數(shù)形如“項 值”這種形式,中間有空格的需要換行書寫,如果值中有空格的需要用雙引號包括起來。比如我們使用-vm C:/Java/jre1.6.0/bin/javaw.exe參數(shù)設(shè)置虛擬機(jī), 在eclipse.ini文件中要寫成這樣: -vm C:/Java/jre1.6.0/bin/javaw.exe -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M 實際運(yùn)行的結(jié)果可以通過Eclipse中“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按鈕進(jìn)行查看。 另外需要說明的是,Eclipse壓縮包中自帶的eclipse.ini文件內(nèi)容是這樣的: -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m -vmargs -Xms40m -Xmx256m 其中–launcher.XXMaxPermSize(注意最前面是兩個連接線)跟-XX:MaxPermSize參數(shù)的含義基本是一樣的,我覺得唯一的區(qū)別就是前者是eclipse.exe啟動的時候設(shè)置的參數(shù), 而后者是eclipse所使用的JVM中的參數(shù)。其實二者設(shè)置一個就可以了,所以這里可以把–launcher.XXMaxPermSize和下一行使用#注釋掉。 4. 其他的啟動參數(shù)。 如果你有一個雙核的CPU,也許可以嘗試這個參數(shù): -XX:+UseParallelGC 讓GC可以更快的執(zhí)行。(只是JDK 5里對GC新增加的參數(shù)) 補(bǔ)充:   如果你的WEB APP下都用了大量的第三方j(luò)ar,其大小超過了服務(wù)器jvm默認(rèn)的大小,那么就會產(chǎn)生內(nèi)存益出問題了。 解決方法: 設(shè)置MaxPermSize大小 可以在myelipse里選中相應(yīng)的服務(wù)器比如tomcat5,展開里面的JDK子項頁面,來增加服務(wù)器啟動的JVM參數(shù)設(shè)置: -Xms128m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m 或者手動設(shè)置MaxPermSize大小,比如tomcat, 修改TOMCAT_HOME/bin/catalina.bat,在echo "Using CATALINA_BASE: $CATALINA_BASE"上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m 建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以減少jar 文檔重復(fù)占用內(nèi)存 1.JVM內(nèi)存管理的機(jī)制   內(nèi)存空間劃分為:Sun JDK在實現(xiàn)時遵照J(rèn)VM規(guī)范,將內(nèi)存空間劃分為堆、JVM方法棧、方法區(qū)、本地方法棧、PC寄存器。 堆: 堆用于存儲對象實例及數(shù)組值,可以認(rèn)為Java中所有通過new創(chuàng)建的對象的內(nèi)存都在此分配,Heap中對象所占用的內(nèi)存由GC進(jìn)行回收,在32位操作系統(tǒng)上最大為2GB,在64位操作系統(tǒng)上則沒有限制,其大小可通過-Xms和-Xmx來控制,-Xms為JVM啟動時申請的最小Heap內(nèi)存,默認(rèn)為物理內(nèi)存的1/64但小于1GB;-Xmx為JVM可申請的最大Heap內(nèi)存,默認(rèn)為物理內(nèi)存的1/4但小于1GB,默認(rèn)當(dāng)空余堆內(nèi)存小于40%時,JVM會增大Heap到-Xmx指定的大小,可通過-XX:MinHeapFreeRatio=來指定這個比例;當(dāng)空余堆內(nèi)存大于70%時,JVM會減小Heap的大小到-Xms指定的大小,可通過-XX:MaxHeapFreeRatio=來指定這個比例,對于運(yùn)行系統(tǒng)而言,為避免在運(yùn)行時頻繁調(diào)整Heap 的大小,通常將-Xms和-Xmx的值設(shè)成一樣。 JVM方法棧: 為線程私有,其在內(nèi)存分配上非常高效。當(dāng)方法運(yùn)行完畢時,其對應(yīng)的棧幀所占用的內(nèi)存也會自動釋放。當(dāng)JVM方法棧空間不足時,會拋出StackOverflowError的錯誤,在Sun JDK中可以通過-Xss來指定其大小。 方法區(qū): 要加載的類的信息(名稱、修飾符等)、類中的靜態(tài)變量、類中定義為final類型的常量、類中的Field信息、類中的方法信息。方法區(qū)域也是全局共享的,在一定條件下它也會被GC,當(dāng)方法區(qū)域要使用的內(nèi)存超過其允許的大小時,會拋出OutOfMemory的錯誤信息。在Sun JDK中這塊區(qū)域?qū)?yīng)Permanet Generation,又稱為持久代,默認(rèn)最小值為16MB,最大值為64MB,可通過-XX:PermSize及-XX:MaxPermSize來指定最小值和最大值。 本地方法棧: 用于支持native方法的執(zhí)行,存儲了每個native方法調(diào)用的狀態(tài)。在Sun JDK的實現(xiàn)中,和JVM方法棧是同一個。 PC寄存器: 占用的可能為CPU寄存器或操作系統(tǒng)內(nèi)存。 2.Java堆和棧的區(qū)別   Java把內(nèi)存劃分成兩種:一種是棧內(nèi)存,一種是堆內(nèi)存。   在函數(shù)中定義的一些基本類型的變量和對象的引用變量都在函數(shù)的棧內(nèi)存中分配。當(dāng)在一段代碼塊定義一個變量時,Java就在棧中為這個變量分配內(nèi)存空間,當(dāng)超過變量的作用域后,Java會自動釋放掉為該變量所分配的內(nèi)存空間,該內(nèi)存空間可以立即被另作他用。   堆內(nèi)存用來存放由new創(chuàng)建的對象和數(shù)組。在堆中分配的內(nèi)存,由Java虛擬機(jī)的自動垃圾回收器來管理。在堆中產(chǎn)生了一個數(shù)組或?qū)ο蠛螅€可以在棧中定義一個特殊的變量,讓棧中這個變量的取值等于數(shù)組或?qū)ο笤诙褍?nèi)存中的首地址,在棧中的這個特殊的變量就變成了數(shù)組或者對象的引用變量,以后就可以在程序中使用棧內(nèi)存中的引用變量來訪問堆中的數(shù)組或者對象,引用變量相當(dāng)于為數(shù)組或者對象起的一個別名,或者代號。   引用變量是普通變量,定義時在棧中分配內(nèi)存,引用變量在程序運(yùn)行到作用域外釋放。而數(shù)組&對象本身在堆中分配,即使程序運(yùn)行到使用new產(chǎn)生數(shù)組和對象的語句所在地代碼塊之外,數(shù)組和對象本身占用的堆內(nèi)存也不會被釋放,數(shù)組和對象在沒有引用變量指向它的時候,才變成垃圾,不能再被使用,但是仍然占著內(nèi)存,在隨后的一個不確定的時間被垃圾回收器釋放掉。這個也是java比較占內(nèi)存的主要原因。但是在寫程序的時候,可以人為的控制。 3.Java內(nèi)存泄露和內(nèi)存溢出   內(nèi)存泄漏:分配出去的內(nèi)存回收不了   內(nèi)存溢出:指系統(tǒng)內(nèi)存不夠用了

          posted @ 2016-06-21 21:58 youngturk 閱讀(337) | 評論 (0)編輯 收藏

          java面試題:如何解決內(nèi)存溢出

          http://zhidao.baidu.com/link?url=gQ4IAoIl07v0sxITrvasf8LwMwmFELou2d-6w11tqNHsNNdxQvDTg5f-EMlS0HSrAOG0mqw0DoBocICbuSfTvK 第一對所有的代碼包括頁面中的java代碼都進(jìn)行一遍徹底的回顧檢查, 1.對那些靜態(tài)(static)的對象要特別留神,特別是類型為Map,List,Set的,靜態(tài)的變量會一直駐存在內(nèi)存中,生命周期比較長,不會被垃圾器回收。 2.對于代碼,要審查是否生成了大量的冗余的對象,還有一些邏輯業(yè)務(wù)處理的類, 算法是否過于復(fù)雜,調(diào)整算法,對于代碼認(rèn)真審查,再仔細(xì)重構(gòu)一遍代碼,能提高代碼質(zhì)量,提高程序運(yùn)行穩(wěn)定性。 3.Java中的內(nèi)存溢出大都是因為棧中的變量太多了。其實內(nèi)存有的是。建議不用的盡量設(shè)成null以便回收,多用局部變量,少用成員變量。 1),變量所包含的對象體積較大,占用內(nèi)存較多。 2),變量所包含的對象生命周期較長。 3),變量所包含的對象數(shù)據(jù)穩(wěn)定。 4),該類的對象實例有對該變量所包含的對象的共享需求。 4.在我的程序中對靜態(tài)變量的優(yōu)化后,使程序占用內(nèi)存量至少提升了5k-10k。所以也不容忽視。 第二還有就是String類相關(guān)的東西: 1.字符串累加的時候一定要用StringBuffer的append方法,不要使用+操作符連接兩個字符串。差別很大。而且在循環(huán)或某些重復(fù)執(zhí)行的動作中不要去創(chuàng)建String對象,因為String對象是要用StringBuffer對象來處理的,一個String對象應(yīng)該是產(chǎn)生了 3個對象(大概是這樣:))。 2.字符串length()方法來取得字符串長度的時候不要把length放到循環(huán)中,可以在循環(huán)外面對其取值。(包括vector的size方法)。特別是循環(huán)次數(shù)多的時候,盡量把length放到循環(huán)外面。 int size = xmlVector.size(); for (int i = 2; i < size; i++) { ... } 3 .寫代碼的時候處理內(nèi)存溢出 try{ //do sth .... }catch (outofmemoryerror e){//可以用一個共通函數(shù)來執(zhí)行. system.out.print (“no memory! ”); system.gc(); //do sth again .... }   4.對于頻繁申請內(nèi)存和釋放內(nèi)存的操作,還是自己控制一下比較好,但是System.gc()的方法不一定適用,最好使用finallize強(qiáng)制執(zhí)行或者寫自己的finallize方法。 Java 中并不保證每次調(diào)用該方法就一定能夠啟動垃圾收集,它只不過會向JVM發(fā)出這樣一個申請,到底是否真正執(zhí)行垃圾收集,一切都是個未知數(shù)。 1.優(yōu)化程序2.改進(jìn)算法3.增加jvm內(nèi)存分配

          posted @ 2016-06-21 21:37 youngturk 閱讀(316) | 評論 (0)編輯 收藏

          jquery中ajax處理跨域的三大方式 ,jQuery學(xué)習(xí)之jQuery Ajax用法詳解

          http://www.jb51.net/article/77470.htm http://www.php100.com/html/program/jquery/2013/0905/6004.html

          posted @ 2016-06-20 23:10 youngturk 閱讀(156) | 評論 (0)編輯 收藏

          我的理解--關(guān)于jmx

          http://bhsc-happy.iteye.com/blog/678163
          http://www.cnblogs.com/Javame/p/3881187.html
          JMX Java Management Extensions,Java管理擴(kuò)展,初步看了些資料,以為是專門管理,監(jiān)控jvm的一些信息的,特別是visual VM這個監(jiān)控jvm的東西,還有一個添加JMX連接的時候(我自己想錯了,那樣的話應(yīng)該叫jvm Management Extensions),其實他能使得基于java語言開發(fā)的程序能被管理,并且是可擴(kuò)展的。 Jdk以前是通過JVMPI之類來監(jiān)測Java程序運(yùn)行中的jvm和系統(tǒng)的一系列情況,現(xiàn)在通過jmx就可以做到,這是通過java.lang.management 包來實現(xiàn)的,這個包是 JMX 在 JDK方面 的一個應(yīng)用,并不是表示jmx就是一個監(jiān)控jvm的東西。 我們可以用jmx來監(jiān)控我們的系統(tǒng),通過公布API的方式,但是,這里采用監(jiān)控這個詞,也是受了前面的例子的影響,實際上,個人覺得,就可以用jmx來開發(fā)我們的系統(tǒng)。 現(xiàn)在的jboss,hibernate,tomcat各種應(yīng)用都號稱實現(xiàn)了JMX規(guī)范,將可管理,可調(diào)用的MBean注冊到MBeanServer中,通過一種類似“web服務(wù)”的方式公布出去,并且伴有一個名字,可以通過該名字找到該MBean。并且,這里的MBean是可以被管理的,說到這里又想到了OSGI。 JMX與Web Service 個人認(rèn)為,我們實現(xiàn)JMX規(guī)范,將東西發(fā)布出去,和通過web Service的方式是很類似的,也是可以遠(yuǎn)程調(diào)用的,只是相對的web Service的方式更加SOA一些,不過JMX號稱也要提供對非java客戶端的支持,也就是跨語言了吧。。。 現(xiàn)在的JMX連接方式: JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server"); JMXConnector jmxc = JMXConnectorFactory.connect(url, null); 看了下源碼,貌似還是通過RMI來實現(xiàn)的,不知道它要怎么實現(xiàn)非java客戶端支持。 從這里,我覺得JMX可以實現(xiàn)的,我們也都可以通過web Service實現(xiàn),只是看在它有個“M”上,以后如果有什么系統(tǒng)管理,監(jiān)控方面的,可以考慮使用它,也許開發(fā),個人覺得還是使用web service好一些。 說到這里,感覺OSGI與JMX也好像,在看到JMX能夠?qū)Bean進(jìn)行管理的時候,我就覺得跟OSGI很像,OSGI管理的是Bundle,找了找資源,原來早就有人考慮過了: http://teamojiao.iteye.com/blog/438334 順便,在查資料的時候,發(fā)現(xiàn)一個東西, if your question means, how to manage an OSGi runtime with JMX, you should have a look at MAEXO (http://code.google.com/p/maexo/). With MAEXO bundles up and running you will transparently get MBeans for a fair amount of services of the OSGi runtime as well as MBeans for your own services and bundles. Just have a look at the screencast. 摘一些話:僅做參考 <網(wǎng)友回復(fù)> 一個大系統(tǒng)中,各內(nèi)部模塊系統(tǒng)之間的基于接口方式的互相調(diào)用和治理,使用jmx是最佳方案. 帶來的好處是 1.面向接口,遠(yuǎn)程調(diào)用對于開發(fā)人員是透明的,模塊在調(diào)用jmx接口時,與調(diào)用本地方法幾乎相同. 2.可視化的治理界面, 通過 Jconsole等jmx客戶端,可以實時監(jiān)控系統(tǒng),并且可實時調(diào)用方法進(jìn)行某些操作. 典型應(yīng)用場景:  某聊天系統(tǒng),一臺服務(wù)器作為 在線用戶列表服務(wù)器 A1, n臺服務(wù)器為用戶提供聊天業(yè)務(wù)處理 N1 ,N2,N3..., 一臺服務(wù)器作為后臺治理系統(tǒng)A2.  系統(tǒng)治理員現(xiàn)在進(jìn)行下面這樣一個操作,察看某用戶是否在線,找到該用戶,發(fā)現(xiàn)其在線,則將該用戶加入黑名單,并踢下線. 對應(yīng)的jmx接口可以由以下幾個:  A1為A2提供查詢在線用戶jmx接口,加入黑名單接口,kickout接口, A1為N1..等服務(wù)器提供以下接口: 注冊業(yè)務(wù)服務(wù)器,添加在線用戶.查找黑名單用戶 N1...到N3為A1提供kickout接口. 因此在上面的踢下線操作,則由用戶在A2的web界面發(fā)出,交由A1執(zhí)行,A1記錄黑名單之后,再找到用戶所在業(yè)務(wù)服務(wù)器調(diào)用N1提供的接口讓用戶下線. 以上情形是在生產(chǎn)環(huán)境下的部署,而在開發(fā)工作,則可以將A1,A2,N...N3等功能合并在一個應(yīng)用中調(diào)試. 由于使用的是jmx接口,在本地調(diào)試合并之后,可以直接調(diào)用應(yīng)用內(nèi)部接口方法. 這樣借助jmx實現(xiàn)的應(yīng)用模塊的靈活組裝與拆分,使得系統(tǒng)的可以根據(jù)負(fù)載需要,根據(jù)性能情況,靈活的拆分和整合部署分布式的應(yīng)用. 替代方案,選擇webservice,xmlrpc等,但是這些都需要手工編寫或用工具生成大量的代碼來輔助完成接口間的java對象序列化 。 經(jīng)典jmx案例: 1.Jboss.使用jmx治理內(nèi)部的各個service。 2. 基于java的開源網(wǎng)管軟件 Hyperic HQ ,通過jmx與各被治理資源進(jìn)行通訊和信息采集. <網(wǎng)友回復(fù)>JMX是一個治理的框架。 當(dāng)我們想使用JMX的時候,就要問,我們的系統(tǒng)當(dāng)中有需要監(jiān)控治理的資源或者對象嗎?實事求是一點(diǎn),我們不能為了想使用一個高端的技術(shù),就歪曲系統(tǒng)的本來面目。 假如第一個問題是肯定的,接下來就是看這些資源是否有生命周期。 經(jīng)典案例:jboss就是將所有可部署的組件作為資源來治理,這些組建都有其生命周期。這個理念甚至延伸到了其系統(tǒng)內(nèi)部,將其內(nèi)部的服務(wù)作為組件納入到 JMX中來,成就了jboss基于jmx的微內(nèi)核系統(tǒng)。

          posted @ 2016-06-20 09:40 youngturk 閱讀(157) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共33頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          公告

          this year :
          1 jQuery
          2 freemarker
          3 框架結(jié)構(gòu)
          4 口語英語

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          EJB學(xué)習(xí)

          Flex學(xué)習(xí)

          learn English

          oracle

          spring MVC web service

          SQL

          Struts

          生活保健

          解析文件

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 台东县| 正宁县| 峨山| 湛江市| 平泉县| 蚌埠市| 墨竹工卡县| 黄山市| 贺兰县| 花莲县| 乌拉特前旗| 东港市| 舟山市| 晋江市| 策勒县| 中卫市| 台江县| 德江县| 开封市| 郧西县| 日照市| 阜宁县| 鄂尔多斯市| 高清| 油尖旺区| 彭山县| 姜堰市| 杭锦后旗| 陵水| 沾化县| 车致| 益阳市| 乐都县| 泰兴市| 淮阳县| 北京市| 大同县| 义乌市| 德保县| 洛隆县| 长宁县|