<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    2016年6月20日

    財(cái)務(wù)制度題庫(kù)

         摘要: 1財(cái)務(wù)制度題庫(kù) 單選題 1.下列各會(huì)計(jì)要素,(   )不是反映財(cái)務(wù)狀況的會(huì)計(jì)要素。 A.資產(chǎn)          B.負(fù)債          C.收入    ...  閱讀全文

    posted @ 2021-10-22 23:09 youngturk| 編輯 收藏

    jquery 向mybitis后臺(tái)傳完整時(shí)間

    var ssshsj = new Date( $("#ssshsj").val().replace(/-/g,"/")); 對(duì)于Ibatis操作Date/Time/DateTime,總結(jié)如下: 將pojo的屬性類型設(shè)置為java.sql.Date(或java.sql.Time, java.sql.Timestamp),此時(shí)會(huì)嚴(yán)格遵循這三種類型的語(yǔ)義。但此方法因存在前文中提到的性能問(wèn)題,在JDK1.6以前的JDK版本中能少使用就少使用。 如果你想在pojo中使用java.util.Date, 則要注意: 完整的日期時(shí)間,要確保jdbcType為空,或?yàn)镈ATE,TIME以外的值 只需要時(shí)間,要指定jdbcType=”TIME” 只需要日期,要指定jdbcType=”DATE”

    posted @ 2017-03-26 00:22 youngturk| 編輯 收藏

    webwork 實(shí)現(xiàn)數(shù)據(jù)生成text文件,并進(jìn)行壓縮,并進(jìn)行下載

    //實(shí)現(xiàn)壓縮文件功能,采用commons-io-2.0.1.jar ,commons-compress-1.5.jar插件
            final OutputStream out = new FileOutputStream("D:/EDI/EDi.zip");  //實(shí)例文件輸出流
            ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);  
            //實(shí)例化存檔輸出流,工廠方法創(chuàng)建zip的存檔輸出流
    //        File f1 = new File(file.getPath());
            os.putArchiveEntry(new ZipArchiveEntry(file.getName()));  //生成存檔文件名
            IOUtils.copy(new FileInputStream(file), os);  //添加拷貝存檔文件
            
            os.closeArchiveEntry();  
            os.close();  
            
            //*************************
            try {
                File input = new File("D:/EDI/EDi.zip");//獲得下載文件路徑
                contentType="application/octet-stream";
                docStream = new FileInputStream(input);//獲得輸入流名稱
                contentDisposition =URLEncoder.encode(input.getName() ,"UTF-8");
               } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
               }  
               return "download";
    WEBWORK的文件下載機(jī)制。使用起來(lái)還是比較簡(jiǎn)單的。
    下面是用法說(shuō)明:
    首先在一個(gè)ACTION中,如果判斷有權(quán)限進(jìn)行文件下載。
    則:
    1、讀出該下載文件,并生成一個(gè)流。 文件名應(yīng)當(dāng)從請(qǐng)求的request中讀出,或從用戶的表中取出。
    public String downLoadFile(String fileName){
       try {
        File input = new File("e:/engilish literature.doc");
        docStream = new FileInputStream(input);
        contentDisposition = "test.txt";
       } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }  
       return "download";
    }
    2、將輸出導(dǎo)向到一個(gè)特殊的RESULT中去。叫做Steam Result。
             <action name="register" class="com.job2easy.web.user.RegisterAction">
                 <result name="success" type="dispatcher">
                     <param name="location">/home/register-result.jsp</param>
                 </result>
                 <result name="input">
                     <param name="location">/home/register.jsp</param>
                 </result>
                 <result name="download" type="stream">
                     <param name="contentType">application/x-msdownload</param>
                     <param name="inputName">docStream</param>
                     <param name="bufferSize">1024</param>              
                     <param name="contentDisposition">attachment;filename="${contentDisposition}"</param>
                 </result>

                 <interceptor-ref name="params"/>
             </action>
    3、這中間有幾個(gè)參數(shù)需要配置:
         contentType設(shè)成 application/x-msdownload 就可以。這樣瀏覽器會(huì)保證彈出一個(gè)下載文件的對(duì)話框。
        inputName 這個(gè)比較重要,這個(gè)名字是輸入流的名稱, 以后要steam result的實(shí)現(xiàn)類中為根據(jù)OGNL的表達(dá)式去查找的。
        contentDisposition 這個(gè)是下載之后,保存在用戶端的文件名稱。${contentDisposition} 看一下代碼。如果寫成上述的方式,就有機(jī)會(huì)在ACTION中設(shè)置文件名。
    4、另外一個(gè)參數(shù):contentLength就是下載文件的大小,webwork的stream result似乎實(shí)現(xiàn)有問(wèn)題,不能根據(jù)文件的大小動(dòng)態(tài)進(jìn)行設(shè)置,只能寫死。
         這個(gè)參數(shù)的意義是告訴瀏覽下載的文件有多大,以便瀏覽器正確的顯示進(jìn)度條。如果這個(gè)功能很重要的話,可以重新寫一個(gè)RESULT來(lái)實(shí)現(xiàn)。
    0

    posted @ 2016-08-09 17:49 youngturk 閱讀(271) | 評(píng)論 (0)編輯 收藏

    經(jīng)典

    http://blog.csdn.net/jackfrued/article/details/44921941

    posted @ 2016-08-08 15:07 youngturk 閱讀(188) | 評(píng)論 (0)編輯 收藏

    sql行列互轉(zhuǎn)

    數(shù)據(jù)列出來(lái)如下:
     ID NAME    COUR SCORE
    --- ------- ---- -----
      1 name_1  語(yǔ)文    33
      1 name_1  數(shù)學(xué)    63
      1 name_1  英語(yǔ)    71
      1 name_1  歷史    68
      1 name_1  化學(xué)    94
      2 name_2  語(yǔ)文    85
      2 name_2  數(shù)學(xué)     4
      2 name_2  英語(yǔ)    98
      2 name_2  歷史     9
      2 name_2  化學(xué)    12
      3 name_3  語(yǔ)文    49
      3 name_3  數(shù)學(xué)    96
      3 name_3  英語(yǔ)    30
      3 name_3  歷史    60
      3 name_3  化學(xué)     2
    要實(shí)現(xiàn)的行轉(zhuǎn)列的效果如下(或者類似的結(jié)果):
     ID NAME    SCORES
    --- ------- --------------------
      1 name_1  33,63,71,94,68
      2 name_2  85,4,98,12,9
      3 name_3  49,2,60,96,30
    通過(guò)case表達(dá)式
    select id,name,sum(case when course='語(yǔ)文' then score end) "語(yǔ)文",
    sum(case when course='數(shù)學(xué)' then score end) "數(shù)學(xué)",
    sum(case when course='英語(yǔ)' then score end) "英語(yǔ)",
    sum(case when course='歷史' then score end) "歷史",
    sum(case when course='化學(xué)' then score end) "化學(xué)"
    from HANG2LIE
    group by id,name;

    union有去重功能:
    結(jié)構(gòu)如下:
     ID NAME       Chinese       Math    English    History  Chemistry
    --- ------- ---------- ---------- ---------- ---------- ----------
      2 name_2          85          4         98          9         12
      1 name_1          33         63         71         68         94
      3 name_3          49         96         30         60          2
    我們要實(shí)現(xiàn)如下的查詢效果:列轉(zhuǎn)行
     ID NAME     COUR SCORE
    --- -------- ---- -----
      2 name_2   語(yǔ)文    85
      1 name_1   語(yǔ)文    33
      3 name_3   語(yǔ)文    49
      2 name_2   數(shù)學(xué)     4
      1 name_1   數(shù)學(xué)    63
      3 name_3   數(shù)學(xué)    96
      2 name_2   英語(yǔ)    98
      1 name_1   英語(yǔ)    71
      3 name_3   英語(yǔ)    30
      2 name_2   歷史     9
      1 name_1   歷史    68
      3 name_3   歷史    60
      2 name_2   化學(xué)    12
      1 name_1   化學(xué)    94
      3 name_3   化學(xué)     2
    1、集合查詢
    實(shí)現(xiàn)的SQL語(yǔ)句:
    select id,name,'語(yǔ)文' course,chinese score from lie2hang
    union
    select id,name,'數(shù)學(xué)' course,math score from lie2hang
    union
    select id,name,'英語(yǔ)' course,english score from lie2hang
    union
    select id,name,'歷史' course,history score from lie2hang
    union
    select id,name,'化學(xué)' course,chemistry score from lie2hang;

    posted @ 2016-08-04 17:51 youngturk 閱讀(198) | 評(píng)論 (0)編輯 收藏

    oracle 分頁(yè) 偽列 只能小于 不能大于

    select * from (select A.*, rownum rn from T_CD_LOC A where rownum > 20) where rn <41 錯(cuò)


    select * from (select t.* ,rownum rn from T_CD_LOC t where rownum<=40) where rn>=20 對(duì)
    firstIndex=0
    pageNumber
    pageSize=20
    select * from (select A.*,rownum rn from T_CD_LOC a where rownum < ((firstIndex+pageNumber+1)*pageSize) where rn >((firstIndex+pageNumber)*pageSize)

    posted @ 2016-08-04 08:53 youngturk 閱讀(216) | 評(píng)論 (0)編輯 收藏

    js怎么刷新都不管用

    js被緩存了,加控制版本 <script src="../lib_js/paymentplan.js?v=1"></script> 

    posted @ 2016-07-13 15:36 youngturk 閱讀(202) | 評(píng)論 (0)編輯 收藏

    Ehcache學(xué)習(xí) 轉(zhuǎn)2

         摘要: EhCache 分布式緩存/緩存集群開發(fā)環(huán)境:System:WindowsJavaEE Server:tomcat5.0.2.8、tomcat6JavaSDK: jdk6+IDE:eclipse、MyEclipse 6.6 開發(fā)依賴庫(kù):JDK6、 JavaEE5、ehcache-core-2.5.2.jarEmail:hoojo_@126.comBlog:http://blog.csdn...  閱讀全文

    posted @ 2016-07-10 17:14 youngturk 閱讀(211) | 評(píng)論 (0)編輯 收藏

    java 虛擬機(jī)監(jiān)控

    3、JConsole監(jiān)控

         JMX(Java Management Extensions)是一個(gè)為應(yīng)用程序植入管理功能的框架。JMX是一套標(biāo)準(zhǔn)的代理和服務(wù),實(shí)際上,用戶可以在任何Java應(yīng)用程序中使用這些代理和服務(wù)實(shí)現(xiàn)管理。可以利用JDK的JConsole來(lái)訪問(wèn)Tomcat JMX接口實(shí)施監(jiān)控,具體步驟如下:

    1)首先,打開Tomcat5的bin目錄中的catalina.bat文件,添加:

    JAVA_OPTS="-Xms512m -Xmx512m -Xmn256m  -XX:PermSize=64m -XX:MaxPermSize=64m  -Djava.rmi.server.hostname=192.168.222.132 -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

    -Dcom.sun.management.jmxremote:代表開啟JMX的管理功能

    2)重啟tomcat,并查看監(jiān)控端口(上面配置的1090)是否已啟動(dòng)

    3)打開jdk的bin目錄(如C:\Program Files\Java\jdk1.7.0_17\bin)下的JConsole,并輸入iP和監(jiān)控端口進(jìn)行連接

         

     

    監(jiān)控結(jié)果:

         

    posted @ 2016-07-09 16:06 youngturk 閱讀(183) | 評(píng)論 (0)編輯 收藏

    hibernate 刪除關(guān)聯(lián)表

    http://www.itzhai.com/hibernate-one-to-many-association-mapping-configuration-and-the-cascade-delete-problem.html首先舉一個(gè)簡(jiǎn)單的一對(duì)多雙向關(guān)聯(lián)的配置:

    一的一端:QuestionType類

    package com.exam.entity;
    import java.util.Set;
    public class QuestionType {
        private String typeName;
        private char typeUniqueness;
        private Set quesion;
        public String getTypeName() {
            return typeName;
        }
        public void setTypeName(String typeName) {
            this.typeName = typeName;
        }
        public char getTypeUniqueness() {
            return typeUniqueness;
        }
        public void setTypeUniqueness(char typeUniqueness) {
            this.typeUniqueness = typeUniqueness;
        }
        public Set getQuesion() {
            return quesion;
        }
        public void setQuesion(Set quesion) {
            this.quesion = quesion;
        }
    }

    配置文件:

    <hibernate-mapping package="com.exam.entity">
        <class name="QuestionType" table="exam_question_type">
            <id name="typeName" column="type_name"></id>
            <property name="typeUniqueness"  column="type_uniqueness"/>
            <set name="quesion" inverse="true" cascade="delete">
                <key column="question_type_name"/>
                <one-to-many class="Question"/>
            </set>
        </class>
    </hibernate-mapping>

    多的一端:Question類

    package com.exam.entity;
    import java.util.Date;
    public class Question {
        private int questionNo;
        private QuestionType questionType;
        private String questionsTitle;
        public int getQuestionNo() {
            return questionNo;
        }
        public void setQuestionNo(int questionNo) {
            this.questionNo = questionNo;
        }
        public QuestionType getQuestionType() {
            return questionType;
        }
        public void setQuestionType(QuestionType questionType) {
            this.questionType = questionType;
        }
        public String getQuestionsTitle() {
            return questionsTitle;
        }
        public void setQuestionsTitle(String questionsTitle) {
            this.questionsTitle = questionsTitle;
        }
    }

    配置文件:

    <hibernate-mapping package="com.exam.entity">
        <class name="Question" table="exam_question">
            <id name="questionNo" column="question_no" >
                <generator class="increment" />
            </id>
            <many-to-one name="questionType" column="question_type_name"/>
            <property name="questionsTitle" column="questions_title" length="200" />    
        </class>
    </hibernate-mapping>

    首先說(shuō)明一下一些常用的屬性:

    <many-to-one>元素包含以下屬性:

    name:設(shè)定映射的持久化類的屬性名
    column:設(shè)定和持久化類的屬性對(duì)應(yīng)的表的外鍵
    class:設(shè)定持久化類的屬性的類型
    cascade:設(shè)定是否級(jí)聯(lián)
    lazy:設(shè)定是否延遲加載

    <set>元素包含以下屬性:

    name:設(shè)定映射的持久化類的屬性名
    cascade:設(shè)置是否級(jí)聯(lián)
    inverse:設(shè)定反向控制,如果為true則一的一端不維護(hù)外鍵
    <key>:設(shè)定與所關(guān)聯(lián)的持久化類對(duì)應(yīng)的表的外鍵。
    one-to-many:設(shè)定所關(guān)聯(lián)的持久化類

    如果要對(duì)一對(duì)多關(guān)聯(lián)映射進(jìn)行級(jí)聯(lián)刪除,可以按照上面的舉例進(jìn)行配置:

    首先看到一的一端:

    <set name="quesion" inverse="true" cascade="delete">
        <key column="question_type_name"/>
        <one-to-many class="Question"/>
    </set>

    這里設(shè)置inverse表示一的一端不維護(hù)外鍵,設(shè)置cascade=”delete”表示刪除一的一端時(shí)對(duì)關(guān)聯(lián)到得多的所有的對(duì)象也一起刪除

    再看到多的一端:

    <many-to-one name="questionType" column="question_type_name"/>

    這里的column表示外鍵的名,需要和一的一端設(shè)置的key標(biāo)簽里的column保持一致,表示維護(hù)同一個(gè)鍵值。

    可以按照如下的代碼執(zhí)行刪除操作:

    session.beginTransaction();

    QuestionType questionType = (QuestionType) session.load(QuestionType.class, "判斷題");            
    session.delete(questionType);        
    session.getTransaction().commit();

    這里使用load查上來(lái)的對(duì)象是持久狀態(tài)的(Persistent),只有是Persistent狀態(tài)的對(duì)象才可以使用session.delete()操作進(jìn)行級(jí)聯(lián)刪除,由new創(chuàng)建的對(duì)象屬于Transient狀態(tài),不能進(jìn)行session.delete()操作。

    posted @ 2016-07-09 14:21 youngturk 閱讀(305) | 評(píng)論 (0)編輯 收藏

    hibernate 刪除關(guān)聯(lián)表

    需要先刪子表,再刪除主表,否則報(bào)錯(cuò) 好文章 http://www.itzhai.com/hibernate-one-to-many-association-mapping-configuration-and-the-cascade-delete-problem.html

    posted @ 2016-07-09 14:18 youngturk 閱讀(205) | 評(píng)論 (0)編輯 收藏

    middlegen生成pojo

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

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

    MyBatis 需要研究

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

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

    ftp socket

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

    posted @ 2016-06-27 12:45 youngturk 閱讀(123) | 評(píng)論 (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_ 問(wèn)題1:XML是什么?   答:XML即可擴(kuò)展標(biāo)記語(yǔ)言(Extensible Markup language),你可以根據(jù)自己的需要擴(kuò)展XML。XML中可以輕松定義, 等自定義標(biāo)簽,而在HTML等其他標(biāo)記語(yǔ)言中必須使用預(yù)定義的標(biāo)簽,比如

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

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

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

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

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

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

    http://i-lolo.iteye.com/blog/1611562 在進(jìn)入網(wǎng)絡(luò)通信之前,讓我們來(lái)普及一點(diǎn)網(wǎng)絡(luò)基礎(chǔ)概念。如果你是有一定的計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ),請(qǐng)直接跳到第五點(diǎn)之后開始閱讀。 第一、 什么是計(jì)算機(jī)網(wǎng)絡(luò)? 書本上那些文縐縐的概念我們可以不去理,我告訴你,我們兩臺(tái)電腦連在一起就組成了一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)。其實(shí)我們的電腦甚至是全世界的電腦都是連著的,只要你的電腦連著網(wǎng),你就在這個(gè)巨大的計(jì)算機(jī)網(wǎng)絡(luò)里,你也許會(huì)問(wèn)為什么我和他們是連著的啊?大家知道自己是怎么上的網(wǎng)?ADSL是吧,撥號(hào)上網(wǎng)。換個(gè)比方說(shuō)吧,我們?cè)诠疚覀兊碾娔X通過(guò)網(wǎng)線,雙絞線,然后是Hub(集線器),連接到胡哥的電腦,然后胡哥的機(jī)子通過(guò)撥號(hào),ADSL,連到電信的網(wǎng)關(guān)那兒,然后中國(guó)電信通過(guò)海底光纜和美國(guó)電信網(wǎng)關(guān)連接,然后再像剛剛我們連接中國(guó)電信一樣,逆推過(guò)去,連接到美國(guó)每一臺(tái)聯(lián)網(wǎng)的計(jì)算機(jī)。所以說(shuō)只要你連著網(wǎng),你就是和全世界的在線用戶連著。這是一個(gè)巨大的計(jì)算機(jī)網(wǎng)絡(luò)。非常巨大。 第二、 計(jì)算機(jī)網(wǎng)絡(luò)的主要功能? 資源共享、信息傳輸與集中處理、均衡負(fù)荷與分布處理、綜合信息服務(wù)(www/綜合數(shù)字網(wǎng)絡(luò) ISDN)。這些個(gè)功能,不多說(shuō)。這些你不平時(shí)都在用么?你的資源能夠上傳共享給其他人,有的人平時(shí)還很喜歡聊QQ,是吧,所以上面說(shuō)的這四個(gè)也許還有更多的什么功能都是些冠冕堂皇的話,稍微看下就好。用了自然就曉得了。 第三、 什么是網(wǎng)絡(luò)通信協(xié)議? 我來(lái)問(wèn)你,為什么你說(shuō)話身邊的人能夠聽的懂,別人說(shuō)的話你為什么也能夠聽懂,而為什么如果你去對(duì)一個(gè)外國(guó)人說(shuō)話或者一個(gè)外國(guó)人來(lái)和你說(shuō)話你們卻互相聽不懂呢?你會(huì)說(shuō)廢話嘛因?yàn)槲艺f(shuō)的是中文,是漢語(yǔ),中國(guó)人說(shuō)的都是漢語(yǔ),而外國(guó)人說(shuō)的是另一種語(yǔ)言,是外語(yǔ)。就是這樣,網(wǎng)絡(luò)通信協(xié)議就像我們的中文一樣,她就是我們之間的共同語(yǔ)言,他規(guī)定了我們之間怎么說(shuō)話,我先說(shuō)什么你再說(shuō)什么,你怎么說(shuō),而我應(yīng)該怎么聽。而網(wǎng)絡(luò)通信得先規(guī)定約定一些俗成的網(wǎng)絡(luò)通信協(xié)議,先說(shuō)好,兩臺(tái)計(jì)算機(jī)之間什么收發(fā)信息,信息格式是什么,信息怎么發(fā),怎么接收,而萬(wàn)一出錯(cuò)怎么辦怎么處理。沒(méi)有了這個(gè)協(xié)議,兩臺(tái)電腦就不知道互相之間怎么說(shuō)話,就像你對(duì)一頭大母豬說(shuō)完愛(ài)你,而人家根本就不知道你在說(shuō)什么。 在這兒和大家提一下網(wǎng)絡(luò)協(xié)議的分層思想。學(xué)過(guò)計(jì)算機(jī)網(wǎng)絡(luò)的同學(xué)都知道有兩種基本的國(guó)際標(biāo)準(zhǔn)分層模型,一個(gè)是OSI參考模型,一個(gè)是TCP/IP參考模型。OSI參考模型,是國(guó)際標(biāo)準(zhǔn)化組織搞出來(lái)的開放互聯(lián)傳統(tǒng)模型,一共有七層:物理/數(shù)據(jù)鏈路/網(wǎng)絡(luò)/傳輸/會(huì)話/表示/應(yīng)用。學(xué)網(wǎng)絡(luò)和硬件的一般都要熟悉這七層標(biāo)準(zhǔn),至于這七層都是干嘛的,大家自己?jiǎn)柖饶锘蛘咦约嚎搓P(guān)于網(wǎng)絡(luò)的書去。(中南大學(xué)高陽(yáng)教授主編了一本叫《計(jì)算機(jī)網(wǎng)絡(luò)原理與實(shí)用技術(shù)》的書,里邊很詳盡的介紹了這個(gè)OSI參考模型,沒(méi)記錯(cuò)的話應(yīng)該是在第一章1.4.5里,是放在TCP/IP協(xié)議之后的……)這里就不多說(shuō)了,因?yàn)閷?duì)于咱們編程的軟件人員來(lái)說(shuō),實(shí)際當(dāng)中的應(yīng)用,是分為四層,也就是TCP/IP參考模型。最底層物理+數(shù)據(jù)鏈路層/網(wǎng)絡(luò)層/傳輸層/應(yīng)用層。我們編的程序是位于應(yīng)用層,所以說(shuō),我們一直是在和哪一層打交道?TCP/IP層。我們編寫一個(gè)程序發(fā)送一些數(shù)據(jù),發(fā)給傳輸層,TCP/IP層,在這一層對(duì)數(shù)據(jù)進(jìn)行封裝,按照先前約定的協(xié)議,然后走向下一層,通過(guò)網(wǎng)線,再走到物理數(shù)據(jù)鏈路層,這時(shí)候數(shù)據(jù)就變成了一連串的01010101,到達(dá)對(duì)面之后逆推上面的過(guò)程,進(jìn)行解封,ok,信息發(fā)送完畢。這兒涉及到比較多的網(wǎng)絡(luò)底層,目前我們不需要過(guò)多了解,因?yàn)槲覀円龅墓ぷ鞑恍枰私鉅砍兜降竭@么底層的東西,如果你想深入了解或者今后你想做殺毒軟件什么的,去讀《TCP/IP詳解》。 第四、 IP——(Internet Protocol網(wǎng)絡(luò)之間互連的協(xié)議)? 你不用管其他的,你只需要知道IP這個(gè)東西給我們做出的最大貢獻(xiàn),就是給我們每一臺(tái)電腦提供了一個(gè)獨(dú)一無(wú)二的IP地址。你想我的機(jī)器要和你的機(jī)器交流說(shuō)話,我得知道你的機(jī)器叫什么,你的機(jī)器得有一個(gè)獨(dú)一無(wú)二的區(qū)別標(biāo)識(shí),否則的話我就不知道傳的信息有沒(méi)有傳到你那兒,也不知道這信息到底傳給誰(shuí)。IP地址這東西我們都知道吧?像我的本機(jī)IP: 113.240.187.242 這是湖南省長(zhǎng)沙市的IP。他是由四個(gè)字節(jié)組成的(也就是說(shuō)每一個(gè)值不能超過(guò)255)。(這個(gè)是IPV4,能夠組成將近四億多地址,現(xiàn)在已經(jīng)出來(lái)了IPV6,高檔貨,八個(gè)字節(jié),地址數(shù)是IPV4的幾何倍數(shù))IPV4的IP地址按照其網(wǎng)絡(luò)IP段和主機(jī)IP段占的字節(jié)數(shù)分ABC三類網(wǎng)。這個(gè)這里不說(shuō),大家自己去了解,好吧?拿高陽(yáng)教授的那本書翻翻。順帶看看子網(wǎng)掩碼啊網(wǎng)關(guān)啊什么的。自己去了解。在這兒我就累得給你敲了。 第五、 TCP協(xié)議和UDP協(xié)議? 好了,上一步里我們通過(guò)獨(dú)一無(wú)二的IP地址找到了對(duì)方連在了一起。我們可以通話了,關(guān)于通話我們有兩種方式: 第一、 TCP協(xié)議,什么叫TCP協(xié)議?Transmission Control Protocol 傳輸控制協(xié)議TCP是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層(Transport layer)通信協(xié)議。什么叫可靠的?打個(gè)比方,我們打電話,上一步通過(guò)IP找到對(duì)方就相當(dāng)于撥號(hào)打通了你的電話,你拿起電話接了,我說(shuō)一句“喂?”,如果你這邊不回應(yīng),我就會(huì)杵這兒一直“喂”下去,是不?因?yàn)椴恢滥隳沁叺降捉拥搅寺牭搅宋业脑挍](méi)有,所以你這邊一定要告訴我你聽到了你收到了我剛剛的那句信息,我才會(huì)接著給你說(shuō)下面的話給你發(fā)下面的數(shù)據(jù)。我每發(fā)一次信息我要你給我確認(rèn)收到了,然后我再給你發(fā)接下來(lái)的東西,這個(gè)就叫可靠。在TCP/IP協(xié)議里邊這叫“三次握手”機(jī)制。怎么握手,握手是怎么回事,問(wèn)度娘,好吧? 第二、 UDP協(xié)議。User Datagram Protocol的簡(jiǎn)稱, 中文名是用戶數(shù)據(jù)報(bào)協(xié)議,是 OSI 參考模型中一種無(wú)連接的傳輸層協(xié)議。UDP這種方式相對(duì)于TCP來(lái)說(shuō)更加簡(jiǎn)單。UDP說(shuō)話就是,我給你說(shuō)一句話,你聽沒(méi)聽到我不管。就像發(fā)電報(bào),“黃河黃河我是長(zhǎng)江!”哐當(dāng)一下就發(fā)出去了。不管黃河收到?jīng)]有。兩種方式一種安全可靠但是慢,一種簡(jiǎn)單快捷但是不可靠。根據(jù)不同的需求選擇。像我們平時(shí)聊QQ開視頻啊什么的,用的就是UDP,因?yàn)槲覀儌鬏數(shù)倪@些個(gè)數(shù)據(jù)丟個(gè)一兩個(gè)包什么的無(wú)所謂,頂多就是視頻多了幾個(gè)馬賽克,是吧。那么平時(shí)我們玩的網(wǎng)絡(luò)游戲,像CF啊魔獸世界啊,是哪一種呢?自己想,好吧? 第三、 中南-馬志丹 http://java-mzd.javaeye.com 驚喜看得到! 基礎(chǔ)普及完了,接下來(lái)我們來(lái)看看為什么要去做網(wǎng)絡(luò)通信。這一段我就簡(jiǎn)單點(diǎn)說(shuō)。在計(jì)算機(jī)剛出來(lái)那會(huì)兒 ,那時(shí)候的人們都覺(jué)得計(jì)算機(jī)這東西就是主要為計(jì)算而存在的就是一個(gè)計(jì)算工具,但是自從1983年起,TCP\IP協(xié)議的出現(xiàn),讓計(jì)算機(jī)從此轉(zhuǎn)變?yōu)榱巳藗兊囊粋€(gè)交流工具。自那以后,只要你有一臺(tái)電腦,不管你是開網(wǎng)頁(yè)看電影,還是上人人找朋友,不管你是登郵箱收發(fā)郵件,還是登QQ聊天,你的生活的方方面面都離不開那電腦屏幕后邊的網(wǎng)絡(luò)技術(shù)。換句話說(shuō),如果沒(méi)有了網(wǎng)絡(luò)通信技術(shù),電腦以及大多數(shù)軟件將會(huì)失去他們?cè)械纳Α>拖褚豢么髽錄](méi)有根。沒(méi)有網(wǎng)絡(luò)通信就沒(méi)有如今繁榮的QQ世界,沒(méi)有了網(wǎng)絡(luò)通信,世界上那些個(gè)IT巨頭諸如IBM諸如谷歌,將會(huì)如斷線風(fēng)箏落日殘陽(yáng)。我想說(shuō),如果你不懂網(wǎng)絡(luò)通信技術(shù),你就不是一個(gè)合格的程序員,如果你不精通網(wǎng)絡(luò)通信技術(shù),你就無(wú)法開發(fā)出一款真正優(yōu)秀的營(yíng)運(yùn)軟件!除非你想永遠(yuǎn)停留在枯燥的單機(jī)時(shí)代,你想讓自己的技術(shù)永遠(yuǎn)留在表層。 現(xiàn)在,讓我們來(lái)考慮如何實(shí)現(xiàn)。 在做實(shí)現(xiàn)之前,我想先讓大家明白幾個(gè)概念: 1) Socket A. 兩個(gè)Java應(yīng)用程序可通過(guò)一個(gè)雙向的網(wǎng)絡(luò)通信連接實(shí)現(xiàn)數(shù)據(jù)交換,這個(gè)雙向鏈路的一端稱為一個(gè)Socket B. Socket通常用來(lái)實(shí)現(xiàn)client-server連接 C. Java.net包中定義的兩個(gè)類Socket和ServerSocket,分別用來(lái)實(shí)現(xiàn)雙向連接的client和server端 D. 建立連接時(shí)所需要的尋址信息為遠(yuǎn)程計(jì)算機(jī)的IP地址和端口號(hào)(Port number) 上面我們提到了IP地址,那是每一臺(tái)電腦獨(dú)一無(wú)二的一個(gè)地址標(biāo)識(shí),是為了對(duì)方計(jì)算機(jī)能夠找得到你給你發(fā)信息。建立連接我們很顯然需要這個(gè)信息才能夠完成。那么這個(gè)端口號(hào)又是用來(lái)干什么的呢?舉個(gè)例子,假如說(shuō)我電腦上現(xiàn)在上著人人和QQ,你的電腦上也是上著人人和QQ,如果我用QQ給你發(fā)一條消息他怎么知道就發(fā)到你的QQ上而不會(huì)在你的人人上呢?是吧?所以說(shuō)光用IP地址是無(wú)法區(qū)分到不同的應(yīng)用程序的。所以需要端口號(hào)來(lái)達(dá)到這個(gè)作用。端口號(hào)在計(jì)算機(jī)內(nèi)部是用兩個(gè)字節(jié)來(lái)表示,也就是說(shuō)總共有65536個(gè)端口。在這兒需要注意下面兩個(gè)點(diǎn): ?1.1024之前的端口我們自己編的程序不要征用它,因?yàn)檫@些端口是給系統(tǒng)用的。比如說(shuō)80端口,胡哥給咱們講過(guò)的。干嘛的?負(fù)責(zé)處理HTTP上網(wǎng)訪問(wèn)網(wǎng)頁(yè)等等的端口。還有就是21端口,F(xiàn)TP的,是吧?還有其他的一些著名端口,想知道問(wèn)度娘去,好吧?在這里就不羅嗦了。 ?2.TCP端口和UDP端口是分開的,比如說(shuō)TCP有個(gè)8888端口,他和你的UDP8888端口是不一樣的。 ?3.上述每一類有65536個(gè)端口。也就是說(shuō)我們的計(jì)算機(jī)能夠運(yùn)行131072個(gè)程序,只要你電腦吃得消。 既然要實(shí)現(xiàn)通信,那我們肯定要確定兩個(gè)通信對(duì)象,一個(gè)是服務(wù)器對(duì)象server,一個(gè)是客戶端對(duì)象client。我們需要知道,這兩個(gè)對(duì)象是兩個(gè)應(yīng)用程序,他們的對(duì)話,是兩個(gè)不同的程序之間的對(duì)話。你會(huì)說(shuō)我只有兩個(gè)對(duì)象也還沒(méi)法實(shí)現(xiàn)他們之間的交互啊,不用急,我也知道他們兩個(gè)不是神仙會(huì)心有靈犀。兩個(gè)對(duì)象之間想要實(shí)現(xiàn)互相之間的信息交互,就必須要有一個(gè)通道。這個(gè)通道就像是一根管子,一頭扎在服務(wù)器端,一頭插在客戶端。信息就在這根管子里來(lái)來(lái)往往。這根管子怎么插呢,插在哪兒呢?這個(gè)時(shí)候就需要用到剛剛提到的Socket了。 Socket的意思呢就是一個(gè)插座,服務(wù)器和客戶端各有一個(gè)插座,安插在各自的一個(gè)端口上,管子插在這兩個(gè)插座上,然后在他們這兩個(gè)端口上接入數(shù)據(jù)流。Socket通常用來(lái)實(shí)現(xiàn)server-client連接。Java里面有一個(gè)包java.net,他下邊有定義了兩個(gè)類,Socket和ServerSocket,分別用來(lái)實(shí)現(xiàn)雙向連接的server端和client端。 接下來(lái)我們來(lái)建立TCP服務(wù)器端和客戶端。 服務(wù)器端:我們用的是ServerSocket,新建一個(gè)server插座,并且交給他一個(gè)端口號(hào),這個(gè)插座他有一個(gè)非常方便的構(gòu)造方法ServerSocket(int port),讓他知道自己監(jiān)聽哪一個(gè)端口,然后新建一個(gè)socket對(duì)象,開機(jī),并用.accept語(yǔ)句讓他處在待機(jī)狀態(tài),等待接受client的接入。一旦有客戶端接入就將它賦給新建的Socket對(duì)象,并且用.getInputStream以及.getOutputStream命令獲得他的輸入輸出流。這個(gè)流,就是一根管子,信息都在這根管子里流通。這樣說(shuō)東西不怎么好說(shuō),那么我們就在這個(gè)流上面再包一層,將這個(gè)流封裝成DataOutputStream(),DataInputStream。然后就可以利用輸出流(這個(gè)是相對(duì)于服務(wù)器來(lái)說(shuō),這個(gè)輸出流到了客戶端就成了輸入流了)來(lái).write信息,利用輸入流來(lái).read()獲取客戶端發(fā)來(lái)的信息。Ok,接收完了,.close關(guān)閉輸入輸出流,以及關(guān)閉socket,關(guān)機(jī)。 客戶端:寫法和服務(wù)器端有點(diǎn)類似,新建一個(gè)插座,這兒需要留意的是,客戶端需要用到的插座是Socket而不是ServerSocket,新建一個(gè)Socket牌插座,同樣用他的Socket(String host,int port)構(gòu)造方法方法給他一個(gè)IP地址和端口號(hào),讓它撥打區(qū)號(hào)以及具體電話號(hào),這個(gè)和服務(wù)器端的IP地址以及端口號(hào)要一致,ok,這個(gè)時(shí)候server就相當(dāng)于申請(qǐng)連接到服務(wù)器的某一個(gè)端口上了。兩個(gè)程序就等于是連接上了。但是有些人就會(huì)問(wèn)了啊,這只是客戶端申請(qǐng)連接,人家服務(wù)器接不接受呢。好,前面我們的服務(wù)器不是提到了.accept么,這個(gè)方法就是用來(lái)接受客戶端的,這個(gè)時(shí)候就是:你申請(qǐng)連接,我接受連接,接下來(lái),照著上面服務(wù)器一樣,客戶端也獲取到自己的輸入輸出流,封裝,用輸出流寫出信息。咱們之間就可以互相通信了。還有一個(gè)問(wèn)題啊,要是如果有另一個(gè)客戶端接入了呢?簡(jiǎn)單,那就再.accept一下。如果有N多客戶端接入,那就不斷的.accept,不斷循環(huán)它。這個(gè)問(wèn)題大家都知道可以用while語(yǔ)句。 具體的敲法,請(qǐng)看我給大家附上的代碼實(shí)現(xiàn)。下面給大家看下Socket通信模型。看著這個(gè)模型,再回頭看看上面給大家嘮叨的那些個(gè)點(diǎn),我想大家都知道服務(wù)器和客戶端該怎么去寫怎么去實(shí)現(xiàn)通信了吧? 好了,這一段“三分鐘讓你看懂”到此就結(jié)束了,想來(lái)大家對(duì)網(wǎng)絡(luò)通信也該有了一個(gè)相對(duì)清晰的認(rèn)識(shí)。如果你還想了解學(xué)習(xí)更多的網(wǎng)絡(luò)通信方面的知識(shí),如果你還想知道如何去實(shí)現(xiàn)一些更多的通信功能,比如建立公共聊天室實(shí)現(xiàn)群聊,又比如建立一個(gè)以互聯(lián)網(wǎng)為基礎(chǔ)的以網(wǎng)絡(luò)畫板為主體的協(xié)助平臺(tái),又比如,你想做一個(gè)自己的軟件來(lái)實(shí)現(xiàn)像QQ一樣MSN一樣或者像人人桌面一樣的各種功能……請(qǐng)繼續(xù)關(guān)注我們的隨后更新。請(qǐng)記住,我們是ZCL,我們是一群簡(jiǎn)單快樂(lè)的牧碼人! 后記:第一篇正兒八經(jīng)的技術(shù)日志,4K多全手打,這樣說(shuō)起來(lái)應(yīng)該蠻自豪的感覺(jué)。但是說(shuō)實(shí)話還是覺(jué)得自己寫的有些亂。自己只是把課堂上老師們講的一些知識(shí)點(diǎn),根據(jù)自己敲的代碼以及做了的一些課堂筆記,羅列了出來(lái)。也查了一些在線資料和書籍,像度娘,像學(xué)校發(fā)的那本我都沒(méi)怎么動(dòng)過(guò)的《計(jì)算機(jī)網(wǎng)絡(luò)原理和實(shí)用技術(shù)》。在前面花了好些篇幅來(lái)講計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí),是因?yàn)槲医o自己定下的目標(biāo)就是讓任何一個(gè)人甚至你是沒(méi)怎么學(xué)過(guò)接觸過(guò)java或者計(jì)算機(jī)網(wǎng)絡(luò)這一塊,看了我的博客之后,都能夠?qū)W(wǎng)絡(luò)通信有一個(gè)比較清晰的認(rèn)識(shí),而讓接觸過(guò)java的人知道怎么樣初步的去實(shí)現(xiàn)兩個(gè)軟件或者說(shuō)程序之間的通信,知道他們之間是怎么回事兒并且自己動(dòng)手實(shí)現(xiàn)它。這確實(shí)是一個(gè)有點(diǎn)難度的過(guò)程。但是你如果把這個(gè)都搞定了,那么,你的java網(wǎng)絡(luò)通信就基本可以說(shuō)入了一個(gè)門了。我似乎聽見(jiàn)了胡哥用他那一慣的口吻在我身后說(shuō),這種程度,要說(shuō)入門還早的很呢!當(dāng)然咯,就算我現(xiàn)在做到網(wǎng)絡(luò)畫圖板做到網(wǎng)絡(luò)文件傳輸,也感覺(jué)自己只是進(jìn)了一個(gè)門,門后的世界無(wú)比之大,等待我們不斷的去探索,去創(chuàng)新,去創(chuàng)造它。生命有限,學(xué)海無(wú)涯;人有老時(shí),學(xué)無(wú)止境嘛。發(fā)現(xiàn)的問(wèn)題蠻多。但獲得的收獲也不少。果然檢驗(yàn)自己是否學(xué)會(huì)掌握一個(gè)東西的最好辦法就是嘗試著去教給別人。只有你能夠很清晰的把事兒給別人說(shuō)清楚了教會(huì)了,你才能說(shuō)自己懂了。寫完這篇博客,感覺(jué)自己對(duì)網(wǎng)絡(luò)通信的理解又加深了一些,對(duì)其中的一些知識(shí)點(diǎn)的掌握也更加牢靠了一些。只言片語(yǔ)薄聞淺見(jiàn),希望大家多多批評(píng)不吝賜教! 最后的最后:用胡哥的一句話來(lái)與君共勉吧! 標(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 閱讀(245) | 評(píng)論 (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崩潰,錯(cuò)誤提示: 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 說(shuō)明后面是VM的參數(shù),所以后面的其實(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ī)制,然后再解釋每個(gè)參數(shù)代表的含義。 1)堆(Heap)和非堆(Non-heap)內(nèi)存 按照官方的說(shuō)法:“Java 虛擬機(jī)具有一個(gè)堆,堆是運(yùn)行時(shí)數(shù)據(jù)區(qū)域,所有類實(shí)例和數(shù)組的內(nèi)存均從此處分配。堆是在 Java 虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建的。”“在JVM中堆之外的內(nèi)存稱為非堆內(nèi)存(Non-heap memory)”。 可以看出JVM主要管理兩種類型的內(nèi)存:堆和非堆。簡(jiǎn)單來(lái)說(shuō)堆就是Java代碼可及的內(nèi)存,是留給開發(fā)人員使用的;非堆就是JVM留給自己用的, 所以方法區(qū)、JVM內(nèi)部處理或優(yōu)化所需的內(nèi)存(如JIT編譯后的代碼緩存)、每個(gè)類結(jié)構(gòu)(如運(yùn)行時(shí)常數(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%時(shí),JVM就會(huì)增大堆直到-Xmx的最大限制; 空余堆內(nèi)存大于70%時(shí),JVM會(huì)減少堆直到-Xms的最小限制。因此服務(wù)器一般設(shè)置-Xms、-Xmx 相等以避免在每次GC 后調(diào)整堆的大小。 說(shuō)明:如果-Xmx 不指定或者指定偏小,應(yīng)用可能會(huì)導(dǎo)致java.lang.OutOfMemory錯(cuò)誤,此錯(cuò)誤來(lái)自JVM,不是Throwable的,無(wú)法用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。(還有一說(shuō):MaxPermSize缺省值和-server -client選項(xiàng)相關(guān), -server選項(xiàng)下默認(rèn)MaxPermSize為64m,-client選項(xiàng)下默認(rèn)MaxPermSize為32m。這個(gè)我沒(méi)有實(shí)驗(yàn)。) 上面錯(cuò)誤信息中的PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域。還沒(méi)有弄明白PermGen space是屬于非堆內(nèi)存,還是就是非堆內(nèi)存,但至少是屬于了。 XX:MaxPermSize設(shè)置過(guò)小會(huì)導(dǎo)致java.lang.OutOfMemoryError: PermGen space 就是內(nèi)存益出。 說(shuō)說(shuō)為什么會(huì)內(nèi)存益出: (1)這一部分內(nèi)存用于存放Class和Meta的信息,Class在被 Load的時(shí)候被放入PermGen space區(qū)域,它和存放Instance的Heap區(qū)域不同。 (2)GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)PermGen space進(jìn)行清理,所以如果你的APP會(huì)LOAD很多CLASS 的話,就很可能出現(xiàn)PermGen space錯(cuò)誤。 這種錯(cuò)誤常見(jiàn)在web服務(wù)器對(duì)JSP進(jìn)行pre compile的時(shí)候。 2)JVM內(nèi)存限制(最大值) 首先JVM內(nèi)存限制于實(shí)際的最大物理內(nèi)存,假設(shè)物理內(nèi)存無(wú)限大的話,JVM內(nèi)存的最大值跟操作系統(tǒng)有很大的關(guān)系。簡(jiǎn)單的說(shuō)就32位處理器雖然可控內(nèi)存空間有4GB,但是具體的操作系統(tǒng)會(huì)給一個(gè)限制, 這個(gè)限制一般是2GB-3GB(一般來(lái)說(shuō)Windows系統(tǒng)下為1.5G-2G,Linux系統(tǒng)下為2G-3G),而64bit以上的處理器就不會(huì)有限制了。 2. 為什么有的機(jī)器我將-Xmx和-XX:MaxPermSize都設(shè)置為512M之后Eclipse可以啟動(dòng),而有些機(jī)器無(wú)法啟動(dòng)? 通過(guò)上面對(duì)JVM內(nèi)存管理的介紹我們已經(jīng)了解到JVM內(nèi)存包含兩種:堆內(nèi)存和非堆內(nèi)存,另外JVM最大內(nèi)存首先取決于實(shí)際的物理內(nèi)存和操作系統(tǒng)。所以說(shuō)設(shè)置VM參數(shù)導(dǎo)致程序無(wú)法啟動(dòng)主要有以下幾種原因: 1) 參數(shù)中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize; 2) -Xmx的值和-XX:MaxPermSize的總和超過(guò)了JVM內(nèi)存的最大限制,比如當(dāng)前操作系統(tǒng)最大內(nèi)存限制,或者實(shí)際的物理內(nèi)存等等。說(shuō)到實(shí)際物理內(nèi)存這里需要說(shuō)明一點(diǎn)的是, 如果你的內(nèi)存是1024MB,但實(shí)際系統(tǒng)中用到的并不可能是1024MB,因?yàn)橛幸徊糠直挥布加昧恕? 3. 為何將上面的參數(shù)寫入到eclipse.ini文件Eclipse沒(méi)有執(zhí)行對(duì)應(yīng)的設(shè)置? 那為什么同樣的參數(shù)在快捷方式或者命令行中有效而在eclipse.ini文件中是無(wú)效的呢?這是因?yàn)槲覀儧](méi)有遵守eclipse.ini文件的設(shè)置規(guī)則: 參數(shù)形如“項(xiàng) 值”這種形式,中間有空格的需要換行書寫,如果值中有空格的需要用雙引號(hào)包括起來(lái)。比如我們使用-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 實(shí)際運(yùn)行的結(jié)果可以通過(guò)Eclipse中“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按鈕進(jìn)行查看。 另外需要說(shuō)明的是,Eclipse壓縮包中自帶的eclipse.ini文件內(nèi)容是這樣的: -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m -vmargs -Xms40m -Xmx256m 其中–launcher.XXMaxPermSize(注意最前面是兩個(gè)連接線)跟-XX:MaxPermSize參數(shù)的含義基本是一樣的,我覺(jué)得唯一的區(qū)別就是前者是eclipse.exe啟動(dòng)的時(shí)候設(shè)置的參數(shù), 而后者是eclipse所使用的JVM中的參數(shù)。其實(shí)二者設(shè)置一個(gè)就可以了,所以這里可以把–launcher.XXMaxPermSize和下一行使用#注釋掉。 4. 其他的啟動(dòng)參數(shù)。 如果你有一個(gè)雙核的CPU,也許可以嘗試這個(gè)參數(shù): -XX:+UseParallelGC 讓GC可以更快的執(zhí)行。(只是JDK 5里對(duì)GC新增加的參數(shù)) 補(bǔ)充:   如果你的WEB APP下都用了大量的第三方j(luò)ar,其大小超過(guò)了服務(wù)器jvm默認(rèn)的大小,那么就會(huì)產(chǎn)生內(nèi)存益出問(wèn)題了。 解決方法: 設(shè)置MaxPermSize大小 可以在myelipse里選中相應(yīng)的服務(wù)器比如tomcat5,展開里面的JDK子項(xiàng)頁(yè)面,來(lái)增加服務(wù)器啟動(dòng)的JVM參數(shù)設(shè)置: -Xms128m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m 或者手動(dòng)設(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在實(shí)現(xiàn)時(shí)遵照J(rèn)VM規(guī)范,將內(nèi)存空間劃分為堆、JVM方法棧、方法區(qū)、本地方法棧、PC寄存器。 堆: 堆用于存儲(chǔ)對(duì)象實(shí)例及數(shù)組值,可以認(rèn)為Java中所有通過(guò)new創(chuàng)建的對(duì)象的內(nèi)存都在此分配,Heap中對(duì)象所占用的內(nèi)存由GC進(jìn)行回收,在32位操作系統(tǒng)上最大為2GB,在64位操作系統(tǒng)上則沒(méi)有限制,其大小可通過(guò)-Xms和-Xmx來(lái)控制,-Xms為JVM啟動(dòng)時(shí)申請(qǐng)的最小Heap內(nèi)存,默認(rèn)為物理內(nèi)存的1/64但小于1GB;-Xmx為JVM可申請(qǐng)的最大Heap內(nèi)存,默認(rèn)為物理內(nèi)存的1/4但小于1GB,默認(rèn)當(dāng)空余堆內(nèi)存小于40%時(shí),JVM會(huì)增大Heap到-Xmx指定的大小,可通過(guò)-XX:MinHeapFreeRatio=來(lái)指定這個(gè)比例;當(dāng)空余堆內(nèi)存大于70%時(shí),JVM會(huì)減小Heap的大小到-Xms指定的大小,可通過(guò)-XX:MaxHeapFreeRatio=來(lái)指定這個(gè)比例,對(duì)于運(yùn)行系統(tǒng)而言,為避免在運(yùn)行時(shí)頻繁調(diào)整Heap 的大小,通常將-Xms和-Xmx的值設(shè)成一樣。 JVM方法棧: 為線程私有,其在內(nèi)存分配上非常高效。當(dāng)方法運(yùn)行完畢時(shí),其對(duì)應(yīng)的棧幀所占用的內(nèi)存也會(huì)自動(dòng)釋放。當(dāng)JVM方法棧空間不足時(shí),會(huì)拋出StackOverflowError的錯(cuò)誤,在Sun JDK中可以通過(guò)-Xss來(lái)指定其大小。 方法區(qū): 要加載的類的信息(名稱、修飾符等)、類中的靜態(tài)變量、類中定義為final類型的常量、類中的Field信息、類中的方法信息。方法區(qū)域也是全局共享的,在一定條件下它也會(huì)被GC,當(dāng)方法區(qū)域要使用的內(nèi)存超過(guò)其允許的大小時(shí),會(huì)拋出OutOfMemory的錯(cuò)誤信息。在Sun JDK中這塊區(qū)域?qū)?yīng)Permanet Generation,又稱為持久代,默認(rèn)最小值為16MB,最大值為64MB,可通過(guò)-XX:PermSize及-XX:MaxPermSize來(lái)指定最小值和最大值。 本地方法棧: 用于支持native方法的執(zhí)行,存儲(chǔ)了每個(gè)native方法調(diào)用的狀態(tài)。在Sun JDK的實(shí)現(xiàn)中,和JVM方法棧是同一個(gè)。 PC寄存器: 占用的可能為CPU寄存器或操作系統(tǒng)內(nèi)存。 2.Java堆和棧的區(qū)別   Java把內(nèi)存劃分成兩種:一種是棧內(nèi)存,一種是堆內(nèi)存。   在函數(shù)中定義的一些基本類型的變量和對(duì)象的引用變量都在函數(shù)的棧內(nèi)存中分配。當(dāng)在一段代碼塊定義一個(gè)變量時(shí),Java就在棧中為這個(gè)變量分配內(nèi)存空間,當(dāng)超過(guò)變量的作用域后,Java會(huì)自動(dòng)釋放掉為該變量所分配的內(nèi)存空間,該內(nèi)存空間可以立即被另作他用。   堆內(nèi)存用來(lái)存放由new創(chuàng)建的對(duì)象和數(shù)組。在堆中分配的內(nèi)存,由Java虛擬機(jī)的自動(dòng)垃圾回收器來(lái)管理。在堆中產(chǎn)生了一個(gè)數(shù)組或?qū)ο蠛螅€可以在棧中定義一個(gè)特殊的變量,讓棧中這個(gè)變量的取值等于數(shù)組或?qū)ο笤诙褍?nèi)存中的首地址,在棧中的這個(gè)特殊的變量就變成了數(shù)組或者對(duì)象的引用變量,以后就可以在程序中使用棧內(nèi)存中的引用變量來(lái)訪問(wèn)堆中的數(shù)組或者對(duì)象,引用變量相當(dāng)于為數(shù)組或者對(duì)象起的一個(gè)別名,或者代號(hào)。   引用變量是普通變量,定義時(shí)在棧中分配內(nèi)存,引用變量在程序運(yùn)行到作用域外釋放。而數(shù)組&對(duì)象本身在堆中分配,即使程序運(yùn)行到使用new產(chǎn)生數(shù)組和對(duì)象的語(yǔ)句所在地代碼塊之外,數(shù)組和對(duì)象本身占用的堆內(nèi)存也不會(huì)被釋放,數(shù)組和對(duì)象在沒(méi)有引用變量指向它的時(shí)候,才變成垃圾,不能再被使用,但是仍然占著內(nèi)存,在隨后的一個(gè)不確定的時(shí)間被垃圾回收器釋放掉。這個(gè)也是java比較占內(nèi)存的主要原因。但是在寫程序的時(shí)候,可以人為的控制。 3.Java內(nèi)存泄露和內(nèi)存溢出   內(nèi)存泄漏:分配出去的內(nèi)存回收不了   內(nèi)存溢出:指系統(tǒng)內(nèi)存不夠用了

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

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

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

    posted @ 2016-06-21 21:37 youngturk 閱讀(315) | 評(píng)論 (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 閱讀(154) | 評(píng)論 (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這個(gè)監(jiān)控jvm的東西,還有一個(gè)添加JMX連接的時(shí)候(我自己想錯(cuò)了,那樣的話應(yīng)該叫jvm Management Extensions),其實(shí)他能使得基于java語(yǔ)言開發(fā)的程序能被管理,并且是可擴(kuò)展的。 Jdk以前是通過(guò)JVMPI之類來(lái)監(jiān)測(cè)Java程序運(yùn)行中的jvm和系統(tǒng)的一系列情況,現(xiàn)在通過(guò)jmx就可以做到,這是通過(guò)java.lang.management 包來(lái)實(shí)現(xiàn)的,這個(gè)包是 JMX 在 JDK方面 的一個(gè)應(yīng)用,并不是表示jmx就是一個(gè)監(jiān)控jvm的東西。 我們可以用jmx來(lái)監(jiān)控我們的系統(tǒng),通過(guò)公布API的方式,但是,這里采用監(jiān)控這個(gè)詞,也是受了前面的例子的影響,實(shí)際上,個(gè)人覺(jué)得,就可以用jmx來(lái)開發(fā)我們的系統(tǒng)。 現(xiàn)在的jboss,hibernate,tomcat各種應(yīng)用都號(hào)稱實(shí)現(xiàn)了JMX規(guī)范,將可管理,可調(diào)用的MBean注冊(cè)到MBeanServer中,通過(guò)一種類似“web服務(wù)”的方式公布出去,并且伴有一個(gè)名字,可以通過(guò)該名字找到該MBean。并且,這里的MBean是可以被管理的,說(shuō)到這里又想到了OSGI。 JMX與Web Service 個(gè)人認(rèn)為,我們實(shí)現(xiàn)JMX規(guī)范,將東西發(fā)布出去,和通過(guò)web Service的方式是很類似的,也是可以遠(yuǎn)程調(diào)用的,只是相對(duì)的web Service的方式更加SOA一些,不過(guò)JMX號(hào)稱也要提供對(duì)非java客戶端的支持,也就是跨語(yǔ)言了吧。。。 現(xiàn)在的JMX連接方式: JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server"); JMXConnector jmxc = JMXConnectorFactory.connect(url, null); 看了下源碼,貌似還是通過(guò)RMI來(lái)實(shí)現(xiàn)的,不知道它要怎么實(shí)現(xiàn)非java客戶端支持。 從這里,我覺(jué)得JMX可以實(shí)現(xiàn)的,我們也都可以通過(guò)web Service實(shí)現(xiàn),只是看在它有個(gè)“M”上,以后如果有什么系統(tǒng)管理,監(jiān)控方面的,可以考慮使用它,也許開發(fā),個(gè)人覺(jué)得還是使用web service好一些。 說(shuō)到這里,感覺(jué)OSGI與JMX也好像,在看到JMX能夠?qū)Bean進(jìn)行管理的時(shí)候,我就覺(jué)得跟OSGI很像,OSGI管理的是Bundle,找了找資源,原來(lái)早就有人考慮過(guò)了: http://teamojiao.iteye.com/blog/438334 順便,在查資料的時(shí)候,發(fā)現(xiàn)一個(gè)東西, 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ù)> 一個(gè)大系統(tǒng)中,各內(nèi)部模塊系統(tǒng)之間的基于接口方式的互相調(diào)用和治理,使用jmx是最佳方案. 帶來(lái)的好處是 1.面向接口,遠(yuǎn)程調(diào)用對(duì)于開發(fā)人員是透明的,模塊在調(diào)用jmx接口時(shí),與調(diào)用本地方法幾乎相同. 2.可視化的治理界面, 通過(guò) Jconsole等jmx客戶端,可以實(shí)時(shí)監(jiān)控系統(tǒng),并且可實(shí)時(shí)調(diào)用方法進(jìn)行某些操作. 典型應(yīng)用場(chǎng)景:  某聊天系統(tǒng),一臺(tái)服務(wù)器作為 在線用戶列表服務(wù)器 A1, n臺(tái)服務(wù)器為用戶提供聊天業(yè)務(wù)處理 N1 ,N2,N3..., 一臺(tái)服務(wù)器作為后臺(tái)治理系統(tǒng)A2.  系統(tǒng)治理員現(xiàn)在進(jìn)行下面這樣一個(gè)操作,察看某用戶是否在線,找到該用戶,發(fā)現(xiàn)其在線,則將該用戶加入黑名單,并踢下線. 對(duì)應(yīng)的jmx接口可以由以下幾個(gè):  A1為A2提供查詢?cè)诰€用戶jmx接口,加入黑名單接口,kickout接口, A1為N1..等服務(wù)器提供以下接口: 注冊(cè)業(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等功能合并在一個(gè)應(yīng)用中調(diào)試. 由于使用的是jmx接口,在本地調(diào)試合并之后,可以直接調(diào)用應(yīng)用內(nèi)部接口方法. 這樣借助jmx實(shí)現(xiàn)的應(yīng)用模塊的靈活組裝與拆分,使得系統(tǒng)的可以根據(jù)負(fù)載需要,根據(jù)性能情況,靈活的拆分和整合部署分布式的應(yīng)用. 替代方案,選擇webservice,xmlrpc等,但是這些都需要手工編寫或用工具生成大量的代碼來(lái)輔助完成接口間的java對(duì)象序列化 。 經(jīng)典jmx案例: 1.Jboss.使用jmx治理內(nèi)部的各個(gè)service。 2. 基于java的開源網(wǎng)管軟件 Hyperic HQ ,通過(guò)jmx與各被治理資源進(jìn)行通訊和信息采集. <網(wǎng)友回復(fù)>JMX是一個(gè)治理的框架。 當(dāng)我們想使用JMX的時(shí)候,就要問(wèn),我們的系統(tǒng)當(dāng)中有需要監(jiān)控治理的資源或者對(duì)象嗎?實(shí)事求是一點(diǎn),我們不能為了想使用一個(gè)高端的技術(shù),就歪曲系統(tǒng)的本來(lái)面目。 假如第一個(gè)問(wèn)題是肯定的,接下來(lái)就是看這些資源是否有生命周期。 經(jīng)典案例:jboss就是將所有可部署的組件作為資源來(lái)治理,這些組建都有其生命周期。這個(gè)理念甚至延伸到了其系統(tǒng)內(nèi)部,將其內(nèi)部的服務(wù)作為組件納入到 JMX中來(lái),成就了jboss基于jmx的微內(nèi)核系統(tǒng)。

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

    <2016年6月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    導(dǎo)航

    統(tǒng)計(jì)

    公告

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

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    EJB學(xué)習(xí)

    Flex學(xué)習(xí)

    learn English

    oracle

    spring MVC web service

    SQL

    Struts

    生活保健

    解析文件

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 香蕉视频亚洲一级| 久久久受www免费人成| 亚洲自偷自拍另类图片二区| 亚洲综合国产精品| 亚洲国产成人片在线观看| 亚洲中文字幕人成乱码 | 麻豆视频免费播放| 亚洲黄色免费网站| 亚洲人成网77777亚洲色| 亚洲精品美女久久777777| 伊人久久大香线蕉亚洲| 57pao国产成视频免费播放| 久久久久免费精品国产| a级毛片在线免费| 国产成人免费全部网站| 毛片基地免费视频a| www国产亚洲精品久久久日本| A片在线免费观看| 老司机永久免费网站在线观看| 18禁黄网站禁片免费观看不卡| 久久精品免费全国观看国产| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲av日韩av不卡在线观看| 亚洲第一页中文字幕| AAAAA级少妇高潮大片免费看| 精品成在人线AV无码免费看| 国产成A人亚洲精V品无码| 曰批全过程免费视频观看免费软件| 亚洲免费福利在线视频| 一级片在线免费看| 亚洲高清免费在线观看| 亚洲av永久无码精品表情包| 久99久无码精品视频免费播放| 日韩欧毛片免费视频 | 无人影院手机版在线观看免费| 国产精品亚洲精品日韩已方| 亚洲伊人久久大香线蕉| a毛片成人免费全部播放| 免费A级毛片无码A∨男男| 亚洲精品视频久久| 91福利免费视频|