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

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

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

    2016年6月21日

    財務制度題庫

         摘要: 1財務制度題庫 單選題 1.下列各會計要素,(   )不是反映財務狀況的會計要素。 A.資產          B.負債          C.收入    ...  閱讀全文

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

    jquery 向mybitis后臺傳完整時間

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

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

    webwork 實現數據生成text文件,并進行壓縮,并進行下載

    //實現壓縮文件功能,采用commons-io-2.0.1.jar ,commons-compress-1.5.jar插件
            final OutputStream out = new FileOutputStream("D:/EDI/EDi.zip");  //實例文件輸出流
            ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);  
            //實例化存檔輸出流,工廠方法創建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的文件下載機制。使用起來還是比較簡單的。
    下面是用法說明:
    首先在一個ACTION中,如果判斷有權限進行文件下載。
    則:
    1、讀出該下載文件,并生成一個流。 文件名應當從請求的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、將輸出導向到一個特殊的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、這中間有幾個參數需要配置:
         contentType設成 application/x-msdownload 就可以。這樣瀏覽器會保證彈出一個下載文件的對話框。
        inputName 這個比較重要,這個名字是輸入流的名稱, 以后要steam result的實現類中為根據OGNL的表達式去查找的。
        contentDisposition 這個是下載之后,保存在用戶端的文件名稱。${contentDisposition} 看一下代碼。如果寫成上述的方式,就有機會在ACTION中設置文件名。
    4、另外一個參數:contentLength就是下載文件的大小,webwork的stream result似乎實現有問題,不能根據文件的大小動態進行設置,只能寫死。
         這個參數的意義是告訴瀏覽下載的文件有多大,以便瀏覽器正確的顯示進度條。如果這個功能很重要的話,可以重新寫一個RESULT來實現。
    0

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

    經典

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

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

    sql行列互轉

    數據列出來如下:
     ID NAME    COUR SCORE
    --- ------- ---- -----
      1 name_1  語文    33
      1 name_1  數學    63
      1 name_1  英語    71
      1 name_1  歷史    68
      1 name_1  化學    94
      2 name_2  語文    85
      2 name_2  數學     4
      2 name_2  英語    98
      2 name_2  歷史     9
      2 name_2  化學    12
      3 name_3  語文    49
      3 name_3  數學    96
      3 name_3  英語    30
      3 name_3  歷史    60
      3 name_3  化學     2
    要實現的行轉列的效果如下(或者類似的結果):
     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
    通過case表達式
    select id,name,sum(case when course='語文' then score end) "語文",
    sum(case when course='數學' then score end) "數學",
    sum(case when course='英語' then score end) "英語",
    sum(case when course='歷史' then score end) "歷史",
    sum(case when course='化學' then score end) "化學"
    from HANG2LIE
    group by id,name;

    union有去重功能:
    結構如下:
     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
    我們要實現如下的查詢效果:列轉行
     ID NAME     COUR SCORE
    --- -------- ---- -----
      2 name_2   語文    85
      1 name_1   語文    33
      3 name_3   語文    49
      2 name_2   數學     4
      1 name_1   數學    63
      3 name_3   數學    96
      2 name_2   英語    98
      1 name_1   英語    71
      3 name_3   英語    30
      2 name_2   歷史     9
      1 name_1   歷史    68
      3 name_3   歷史    60
      2 name_2   化學    12
      1 name_1   化學    94
      3 name_3   化學     2
    1、集合查詢
    實現的SQL語句:
    select id,name,'語文' course,chinese score from lie2hang
    union
    select id,name,'數學' course,math score from lie2hang
    union
    select id,name,'英語' course,english score from lie2hang
    union
    select id,name,'歷史' course,history score from lie2hang
    union
    select id,name,'化學' course,chemistry score from lie2hang;

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

    oracle 分頁 偽列 只能小于 不能大于

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


    select * from (select t.* ,rownum rn from T_CD_LOC t where rownum<=40) where rn>=20 對
    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) | 評論 (0)編輯 收藏

    js怎么刷新都不管用

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

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

    Ehcache學習 轉2

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

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

    java 虛擬機監控

    3、JConsole監控

         JMX(Java Management Extensions)是一個為應用程序植入管理功能的框架。JMX是一套標準的代理和服務,實際上,用戶可以在任何Java應用程序中使用這些代理和服務實現管理。可以利用JDK的JConsole來訪問Tomcat JMX接口實施監控,具體步驟如下:

    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,并查看監控端口(上面配置的1090)是否已啟動

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

         

     

    監控結果:

         

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

    hibernate 刪除關聯表

    http://www.itzhai.com/hibernate-one-to-many-association-mapping-configuration-and-the-cascade-delete-problem.html首先舉一個簡單的一對多雙向關聯的配置:

    一的一端: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>

    首先說明一下一些常用的屬性:

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

    name:設定映射的持久化類的屬性名
    column:設定和持久化類的屬性對應的表的外鍵
    class:設定持久化類的屬性的類型
    cascade:設定是否級聯
    lazy:設定是否延遲加載

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

    name:設定映射的持久化類的屬性名
    cascade:設置是否級聯
    inverse:設定反向控制,如果為true則一的一端不維護外鍵
    <key>:設定與所關聯的持久化類對應的表的外鍵。
    one-to-many:設定所關聯的持久化類

    如果要對一對多關聯映射進行級聯刪除,可以按照上面的舉例進行配置:

    首先看到一的一端:

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

    這里設置inverse表示一的一端不維護外鍵,設置cascade=”delete”表示刪除一的一端時對關聯到得多的所有的對象也一起刪除

    再看到多的一端:

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

    這里的column表示外鍵的名,需要和一的一端設置的key標簽里的column保持一致,表示維護同一個鍵值。

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

    session.beginTransaction();

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

    這里使用load查上來的對象是持久狀態的(Persistent),只有是Persistent狀態的對象才可以使用session.delete()操作進行級聯刪除,由new創建的對象屬于Transient狀態,不能進行session.delete()操作。

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

    hibernate 刪除關聯表

    需要先刪子表,再刪除主表,否則報錯 好文章 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) | 評論 (0)編輯 收藏

    middlegen生成pojo

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

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

    MyBatis 需要研究

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

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

    ftp socket

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

    posted @ 2016-06-27 12:45 youngturk 閱讀(123) | 評論 (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即可擴展標記語言(Extensible Markup language),你可以根據自己的需要擴展XML。XML中可以輕松定義, 等自定義標簽,而在HTML等其他標記語言中必須使用預定義的標簽,比如

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

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

    SQL SERVER 的用戶數,連接,連接池 license

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

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

    三分鐘讓你看懂java網絡通信

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

    Xms Xmx PermSize MaxPermSize 區別 java 內存

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

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

    java面試題:如何解決內存溢出

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

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

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

    導航

    統計

    公告

    this year :
    1 jQuery
    2 freemarker
    3 框架結構
    4 口語英語

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    EJB學習

    Flex學習

    learn English

    oracle

    spring MVC web service

    SQL

    Struts

    生活保健

    解析文件

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 无遮挡呻吟娇喘视频免费播放| 少妇性饥渴无码A区免费| 国产成人精品日本亚洲专区61| 免费精品99久久国产综合精品| 亚洲国产成人久久| 亚洲国产精品自在拍在线播放| 99久久99热精品免费观看国产| 亚洲日本在线电影| 亚洲AV无码久久精品色欲| 毛片免费在线播放| 三级网站免费观看| 亚洲中文字幕无码中文字| 亚洲精品成人无限看| 免费无码黄网站在线观看| 国产婷婷成人久久Av免费高清| 久久乐国产综合亚洲精品| 亚洲精品乱码久久久久久自慰| 久久精品免费一区二区喷潮| 久久久久久国产a免费观看不卡| 国产精品高清视亚洲精品| 亚洲日韩欧洲无码av夜夜摸| 精品少妇人妻AV免费久久洗澡| 久久国产免费一区二区三区| 男女超爽视频免费播放| 亚洲国产成人99精品激情在线| 亚洲AV乱码一区二区三区林ゆな| 免费一看一级毛片人| 成人黄页网站免费观看大全| 三年片在线观看免费观看大全一| 又粗又长又爽又长黄免费视频| 亚洲国产精品99久久久久久| 亚洲美女视频网站| 亚洲AV中文无码字幕色三| 国产啪亚洲国产精品无码 | 久久99九九国产免费看小说| 国产在线一区二区综合免费视频| 日韩亚洲人成网站| 久久夜色精品国产噜噜亚洲a| 亚洲无圣光一区二区| 亚洲国产精品自在在线观看 | 亚洲第一精品福利|