飛翔的起點(diǎn)

          從這里出發(fā)

          導(dǎo)航

          <2009年9月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          統(tǒng)計(jì)

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          2009年9月18日 #

          Queue

          public class QuenDemo {
            public static void main(String[] args){
             //public class Queue extends Collection
             Queue<Integer> queue=new LinkedList<Integer>();
             Random  rand = new Random(47);
             for(int i=0;i<10;i++){
              queue.offer(rand.nextInt(i+10));
             }
             System.out.println("1111"+queue.toString());
             printQ(queue);
             //public class LinkedList extends AbstractSequentialList implements List,Queue,Cloneable,Serializable
             Queue<Character> qc=new LinkedList<Character>();
             for(char c:"guoxzh".toCharArray()){
              qc.offer(c);
              System.out.println("qc=="+qc.toString());
             }
              printQ(qc);
            }
            
            public static void printQ(Queue queue){
             while(queue.peek()!=null){
              //peek和element都是在不移除的情況下返回對頭,但是peek在隊(duì)列為空的情況下返回null,element方法會拋出NoSuchElementException異常
              System.out.println(queue.remove());
              //remove和poll方法都是在移除并返回對頭,但是poll在為空時返回null,而remove會拋出NoSucheElementException異常
              System.out.println("2222"+queue.toString());
             }
            }
          }

          posted @ 2009-10-18 18:29 forgood 閱讀(217) | 評論 (0)編輯 收藏

          java中的編碼方法

          package src;

          import java.io.UnsupportedEncodingException;

          public class ChangeCharset {
            /** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁塊 */
            public static final String US_ASCII = "US-ASCII";

            /** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */
            public static final String ISO_8859_1 = "ISO-8859-1";

            /** 8 位 UCS 轉(zhuǎn)換格式 */
            public static final String UTF_8 = "UTF-8";

            /** 16 位 UCS 轉(zhuǎn)換格式,Big Endian(最低地址存放高位字節(jié))字節(jié)順序 */
            public static final String UTF_16BE = "UTF-16BE";

            /** 16 位 UCS 轉(zhuǎn)換格式,Little-endian(最高地址存放低位字節(jié))字節(jié)順序 */
            public static final String UTF_16LE = "UTF-16LE";

            /** 16 位 UCS 轉(zhuǎn)換格式,字節(jié)順序由可選的字節(jié)順序標(biāo)記來標(biāo)識 */
            public static final String UTF_16 = "UTF-16";

            /** 中文超大字符集 */
            public static final String GBK = "GBK";

            /**
             * 將字符編碼轉(zhuǎn)換成US-ASCII碼
             */
            public String toASCII(String str) throws UnsupportedEncodingException{
             return this.changeCharset(str, US_ASCII);
            }
            /**
             * 將字符編碼轉(zhuǎn)換成ISO-8859-1碼
             */
            public String toISO_8859_1(String str) throws UnsupportedEncodingException{
             return this.changeCharset(str, ISO_8859_1);
            }
            /**
             * 將字符編碼轉(zhuǎn)換成UTF-8碼
             */
            public String toUTF_8(String str) throws UnsupportedEncodingException{
             return this.changeCharset(str, UTF_8);
            }
            /**
             * 將字符編碼轉(zhuǎn)換成UTF-16BE碼
             */
            public String toUTF_16BE(String str) throws UnsupportedEncodingException{
             return this.changeCharset(str, UTF_16BE);
            }
            /**
             * 將字符編碼轉(zhuǎn)換成UTF-16LE碼
             */
            public String toUTF_16LE(String str) throws UnsupportedEncodingException{
             return this.changeCharset(str, UTF_16LE);
            }
            /**
             * 將字符編碼轉(zhuǎn)換成UTF-16碼
             */
            public String toUTF_16(String str) throws UnsupportedEncodingException{
             return this.changeCharset(str, UTF_16);
            }
            /**
             * 將字符編碼轉(zhuǎn)換成GBK碼
             */
            public String toGBK(String str) throws UnsupportedEncodingException{
             return this.changeCharset(str, GBK);
            }
           
            /**
             * 字符串編碼轉(zhuǎn)換的實(shí)現(xiàn)方法
             * @param str  待轉(zhuǎn)換編碼的字符串
             * @param newCharset 目標(biāo)編碼
             * @return
             * @throws UnsupportedEncodingException
             */
            public String changeCharset(String str, String newCharset)
              throws UnsupportedEncodingException {
             if (str != null) {
              //用默認(rèn)字符編碼解碼字符串。
              byte[] bs = str.getBytes();
              //用新的字符編碼生成字符串
              return new String(bs, newCharset);
             }
             return null;
            }
            /**
             * 字符串編碼轉(zhuǎn)換的實(shí)現(xiàn)方法
             * @param str  待轉(zhuǎn)換編碼的字符串
             * @param oldCharset 原編碼
             * @param newCharset 目標(biāo)編碼
             * @return
             * @throws UnsupportedEncodingException
             */
            public String changeCharset(String str, String oldCharset, String newCharset)
              throws UnsupportedEncodingException {
             if (str != null) {
              //用舊的字符編碼解碼字符串。解碼可能會出現(xiàn)異常。
              byte[] bs = str.getBytes(oldCharset);
              //用新的字符編碼生成字符串
              return new String(bs, newCharset);
             }
             return null;
            }

            public static void main(String[] args) throws UnsupportedEncodingException {
             ChangeCharset test = new ChangeCharset();
             String str = "This is a 中文的 String!";
             System.out.println("str: " + str);
             String gbk = test.toGBK(str);
             System.out.println("轉(zhuǎn)換成GBK碼: " + gbk);
             System.out.println();
             String ascii = test.toASCII(str);
             System.out.println("轉(zhuǎn)換成US-ASCII碼: " + ascii);
             gbk = test.changeCharset(ascii,ChangeCharset.US_ASCII, ChangeCharset.GBK);
             System.out.println("再把ASCII碼的字符串轉(zhuǎn)換成GBK碼: " + gbk);
             System.out.println();
             String iso88591 = test.toISO_8859_1(str);
             System.out.println("轉(zhuǎn)換成ISO-8859-1碼: " + iso88591);
             gbk = test.changeCharset(iso88591,ChangeCharset.ISO_8859_1, ChangeCharset.GBK);
             System.out.println("再把ISO-8859-1碼的字符串轉(zhuǎn)換成GBK碼: " + gbk);
             System.out.println();
             String utf8 = test.toUTF_8(str);
             System.out.println("轉(zhuǎn)換成UTF-8碼: " + utf8);
             gbk = test.changeCharset(utf8,ChangeCharset.UTF_8, ChangeCharset.GBK);
             System.out.println("再把UTF-8碼的字符串轉(zhuǎn)換成GBK碼: " + gbk);
             System.out.println();
             String utf16be = test.toUTF_16BE(str);
             System.out.println("轉(zhuǎn)換成UTF-16BE碼:" + utf16be);
             gbk = test.changeCharset(utf16be,ChangeCharset.UTF_16BE, ChangeCharset.GBK);
             System.out.println("再把UTF-16BE碼的字符串轉(zhuǎn)換成GBK碼: " + gbk);
            }
          }

          posted @ 2009-09-23 14:25 forgood 閱讀(304) | 評論 (0)編輯 收藏

          byte數(shù)組和String之間的轉(zhuǎn)化

          JAVA里面關(guān)于byte數(shù)組和String之間的轉(zhuǎn)換問題

          把byte轉(zhuǎn)化成string,必須經(jīng)過編碼

          例如下面一個例子:

          import java.io.UnsupportedEncodingException;

          public class test{
           public static void main(String g[]) {
            String s = "12345abcd";
            byte b[] = s.getBytes();
            String t = b.toString();

            System.out.println(t);

           }
          }
          輸出字符串的結(jié)果和字符串s不一樣了.

          經(jīng)過以下方式轉(zhuǎn)碼就可以正確轉(zhuǎn)換了:

          public class test{
           public static void main(String g[]) {
            String s = "12345abcd";
            byte b[] = s.getBytes();
            try {
             String t = new String(b);
             System.out.print(t);
            } catch (Exception e) {
             e.printStackTrace();
            }
           }
          }

          引用:
          String   str   =   "String"; 
                    byte[]   byte1   =   str.getBytes(); 
                    String   str1   =   new   String(byte1); 
                    byte[]   byte2   =   str1.getBytes(); 
                    String   str2   =   new   String(byte2); 
                    System.out.println("str<<<"   +   str); 
                    System.out.println("byte1<<<"   +   byte1); 
                    System.out.println("str1<<<"   +   str1); 
                    System.out.println("byte2<<<"   +   byte2); 
                    System.out.println("str2<<<"   +   str2); 
            ------------------------------------- 
            輸出結(jié)果 
            str<<<String 
            byte1<<<[B@192d342 
            str1<<<String 
            byte2<<<[B@6b97fd 
            str2<<<String 
            
            想請教為什么兩個byte輸出的不一樣呢? 
           

          String   str   =   "String"; 
                    byte[]   byte1   =   str.getBytes(); 
                    String   str1   =   new   String(byte1); 
                    byte[]   byte2   =   str1.getBytes(); 
            ---------- 
            注意byte1是str得到的byte數(shù)組,而byte2是另一個字符串str1得到的數(shù)組 
            他們本身也是兩個對象  
             
            直接打印實(shí)際上調(diào)用的是toString()方法,而toString()的默認(rèn)實(shí)現(xiàn)是打印對象類型+hashCode()  
            [B表示byte數(shù)組  @表示之后的是地址  后面跟著的是hashCode,其實(shí)就是其虛擬機(jī)地址  
            

          posted @ 2009-09-23 14:19 forgood 閱讀(3080) | 評論 (0)編輯 收藏

          jvm的內(nèi)存模型

          從大的方面來講,JVM的內(nèi)存模型分為兩大塊:

           

          永久區(qū)內(nèi)存( Permanent space)和堆內(nèi)存(heap space)。

           

          棧內(nèi)存(stack space)一般都不歸在JVM內(nèi)存模型中,因?yàn)闂?nèi)存屬于線程級別。

          每個線程都有個獨(dú)立的棧內(nèi)存空間。

           

          Permanent space里存放加載的Class類級對象如class本身,methodfield等等。

          heap space主要存放對象實(shí)例和數(shù)組。

          heap spaceOld GenerationNewGeneration組成,OldGeneration存放生命周期長久的實(shí)例對象,而新的對象實(shí)例一般放在NewGeneration

          New Generation還可以再分為Eden區(qū)(圣經(jīng)中的伊甸園)、和Survivor區(qū),新的對象實(shí)例總是首先放在Eden區(qū),Survivor區(qū)作為Eden區(qū)和Old區(qū)的緩沖,可以向Old區(qū)轉(zhuǎn)移活動的對象實(shí)例。

           

          一般,我們常見的OOMout of memory)內(nèi)存溢出異常,就是堆內(nèi)存空間不足以存放新對象實(shí)例時導(dǎo)致。

           

          永久區(qū)內(nèi)存溢出相對少見,一般是由于需要加載海量的Class數(shù)據(jù),超過了非堆內(nèi)存的容量導(dǎo)致。通常出現(xiàn)在Web應(yīng)用剛剛啟動時,因此Web應(yīng)用推薦使用預(yù)加載機(jī)制,方便在部署時就發(fā)現(xiàn)并解決該問題。

           

          棧內(nèi)存也會溢出,但是更加少見。

           

          堆內(nèi)存優(yōu)化:

          調(diào)整JVM啟動參數(shù)-Xms  -Xmx   -XX:newSize -XX:MaxNewSize,如調(diào)整初始堆內(nèi)存和最大對內(nèi)存 -Xms256M -Xmx512M。 或者調(diào)整初始New Generation的初始內(nèi)存和最大內(nèi)存-XX:newSize=128M -XX:MaxNewSize=128M

           

          永久區(qū)內(nèi)存優(yōu)化:

          調(diào)整PermSize參數(shù)   如  -XX:PermSize=256M-XX:MaxPermSize=512M

           

          棧內(nèi)存優(yōu)化:

          調(diào)整每個線程的棧內(nèi)存容量  如  -Xss2048K

           

           

          最終,一個運(yùn)行中的JVM所占的內(nèi)存堆內(nèi)存  +  永久區(qū)內(nèi)存  +  所有線程所占的棧內(nèi)存總和 

          posted @ 2009-09-18 09:12 forgood 閱讀(302) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 增城市| 涪陵区| 贵州省| 汕头市| 阿合奇县| 定结县| 鹰潭市| 舟曲县| 德阳市| 霍林郭勒市| 盐城市| 枝江市| 昌黎县| 红河县| 朔州市| 康平县| 巴彦淖尔市| 和龙市| 上犹县| 射阳县| 馆陶县| 黄大仙区| 天全县| 峨眉山市| 安龙县| 鹿邑县| 宝清县| 乌恰县| 长泰县| 巴彦县| 宜君县| 恩施市| 竹北市| 德兴市| 噶尔县| 凤翔县| 昔阳县| 三河市| 桦南县| 利辛县| 丹阳市|