Time of Update: 2018-12-08
System.nano()調用耗時450 nano,超級慢,比new Object()的操作慢100倍。經一群無聊好事者查證,System.nanoTime()在linux下的實現,最終調用clock_gettime系統函數。100萬次調用耗時,java語言中System.nanoTime()和C語言中的clock_gettime()調用時間基本一致,所以System.nanoTime()慢的原因就是系統調用clock_gettime。無聊好事者請注意,自行測試System.nanoTime()
Time of Update: 2018-12-08
Time of Update: 2018-12-08
最近做了一個小的編譯原理作業,是一個C_minus語言的詞法分析器,本來四月初就已經寫好了一個版本,而且支援一部分的語義邏輯驗證,並且還可以處理所有常數,所有的關鍵字,所有的算術運算子,因為功能超出了老師的預期,以至於被老師懷疑是抄襲網上的代碼,當然老師不只懷疑我,也懷疑別人。最終憑藉我的講解,徹底讓老師信服。但是由於我考慮到一個方法的可讀性原則,不想一個迴圈把所有邏輯都處理掉,所以寫了多個處理方法,把一個大迴圈,分離成多個子迴圈。
Time of Update: 2018-12-08
昨天項目更新功能但是報了一個永久儲存地區溢出的錯,導致我所有被SSH調用的方法都不可用,讓我很是鬱悶了一番,不過這個問題很普遍。網上一搜,解決方案一大堆。之所以報這個錯,原因:PermGen space(記憶體的永久儲存地區)這一部分用於存放Class和Meta的資訊,Class在被 Load的時候被放入PermGen space地區,它和和存放Instance的Heap地區不同,GC不會在主程式運行期對PermGen
Time of Update: 2018-12-08
熟悉C++的人對於兩個字串比較的代碼一定很瞭解:(string1==string2)但在java中,這個代碼即使在兩個字串完全相同的情況下也會返回falseJava中必須使用string1.equals(string2)來進行判斷 補充如果:string s1=new String("Hello");string s2=new String("Hello");則(s1==s2)=false 如果:string s1="Hello";string
Time of Update: 2018-12-08
要擷取對其他包的存取權限,所有的類必須有公用許可權或包許可權。如果將某個成員類聲明為protected,那麼它的.class檔案就會認為是公有類。如果將某個成員類聲明為private,那麼它的.class檔案就會認為是包內類。每個嵌套類和內部累都被存放在自己的.class檔案裡。.class檔案名稱先是封閉類的名字,緊跟著$符號,然後是被封閉類的名字匿名類是用數字來標記的舉例:Equation2.java檔案,產生的.class檔案有:Equation2.class
Time of Update: 2018-12-08
在安裝好Java SDK後,還需要設定一些系統變數,系統變數的設定可以在系統屬性-進階-環境變數中進行 JAVA_HOME=JAVA安裝目錄CLASSPATH=… 庫路徑,可以是目錄或jar檔案,如C:\j2sdk1.4.0_01\lib\dt.jar;d:\java,注意兩個路徑間用分號隔開 如果要使用tomcat,則應該設定CATALINA_HOME=TOMCAT安裝目錄
Time of Update: 2018-12-08
java虛擬機器只有所有啟動並執行線程為後台線程時退出。這就是說我們建立一個線程,如果將它設定成daemon的,那麼即使它還在執行,虛擬機器在完成其他任務後也會退出。測試代碼: 1 package org.foo.go; 2 class Go { 3 public static void main(String[] args) 4 { 5 Thread myThread = new Thread (){ 6 public
Time of Update: 2018-12-08
@鄭昀匯總使用 TDA 工具,看到大量 Java Thread State 的第一反應是:1,線程狀態為“waiting for monitor entry”:意味著它 在等待進入一個臨界區 ,所以它在”Entry Set“隊列中等待。此時線程狀態一般都是 Blocked:java.lang.Thread.State: BLOCKED (on object monitor) 2,線程狀態為“waiting on
Time of Update: 2018-12-08
jstack Dump 記錄檔中的線程狀態dump 檔案裡,值得關注的線程狀態有:死結,Deadlock(重點關注) 執行中,Runnable 等待資源,Waiting on condition(重點關注) 等待擷取監視器,Waiting on monitor entry(重點關注)暫停,Suspended對象等待中,Object.wait() 或
Time of Update: 2018-12-08
經常我們要刪除集合中的某些元素。有些可能會這麼寫。複製代碼 代碼如下: public void operate(List list){ for (Iterator it = list.iterator(); it.hasNext();) { String str = (String)it.next(); if (str.equals("chengang")){ list.remove(str); } } } 這種寫法一運行就會報如下異常: Exception in
Time of Update: 2018-12-08
快速排序作為一種高效的排序演算法被廣泛應用,SUN的JDK中的Arrays.sort 方法用的就是快排。快排採用了經典的分治思想(divide and conquer):Divide:選取一個基元X(一般選取數組第一個元素),通過某種分區操作(partitioning)將數組劃分為兩個部分:左半部分小於等於X,右半部分大於等於X。Conquer: 左右兩個子數組遞迴地調用Divide過程。Combine:快排作為就地排序演算法(in place
Time of Update: 2018-12-08
一、JDBC串連DB2複製代碼 代碼如下:Class.forName("Com.ibm.db2.jdbc.net.DB2Driver"); String url="jdbc:db2://dburl:port/DBname" cn = DriverManager.getConnection( url, sUsr, sPwd ); Class.forName("Com.ibm.db2.jdbc.net.DB2Driver"); String
Time of Update: 2018-12-08
第一,談談final, finally, finalize的區別。 final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載 finally?再異常處理時提供 finally
Time of Update: 2018-12-08
newInstance()使用類載入機制,new是建立一個新類。從JVM角度看,使用new建立一個類的時候,這個類可以沒有被載入。但是使用newInstance()方法的時候,就必須保證這個類已載入且類已經串連了。複製代碼 代碼如下:String className="test";Class c=Class.forName(className); factory=(ExampleInterface)c.newInstance();newInstance():若類型。低效率,只能調用無參構造方法,
Time of Update: 2018-12-08
覺得作者寫得太好了,不得不收藏一下。對這個例子的理解://型別參數不能用基本類型,T和U其實是同一類型。//每次放新資料都成為新的top,把原來的top往下壓一級,通過指標建立連結。//末端哨兵既是預設構造器建立出的符合end()返回true的節點。複製代碼 代碼如下://: generics/LinkedStack.java// A stack implemented with an internal linked structure.package generics;public
Time of Update: 2018-12-08
JAVA中去掉空格 1. String.trim() trim()是去掉首尾空格 2.str.replace(" ", ""); 去掉所有空格,包括首尾、中間 複製代碼 代碼如下:String str = " hell o "; String str2 = str.replaceAll(" ", ""); System.out.println(str2); 3.或者replaceAll(" +",""); 去掉所有空格 4.str = .replaceAll("\\s*"
Time of Update: 2018-12-08
Timer有兩種執行任務的模式,最常用的是schedule,它可以以兩種方式執行任務:1:在某個時間(Data),2:在某個固定的時間之後(int delay).這兩種方式都可以指定任務執行的頻率.看個簡單的例子:複製代碼 代碼如下:import java.io.IOException;import java.util.Timer;public class TimerTest { public static void main(String[] args){
Time of Update: 2018-12-08
一.利用二進位狀態法求排列組合,此種方法比較容易懂,但是運行效率不高,小資料排列組合可以使用複製代碼 代碼如下:import java.util.Arrays;//利用二進位演算法進行全排列//count1:170187//count2:291656public class test { public static void main(String[] args) { long start=System.currentTimeMillis(); count2()
Time of Update: 2018-12-08
複製代碼 代碼如下:package test001;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JToolBar;public class TestJOptionPane implements