2012-04-13 56 views
10

我最近買了一個Moto Atrix 2手機。當我想看看處理器規格的手機, 調用Runtime.getRuntime()。availableProcessors()返回1. 的/ proc/cpuinfo中也有大約只是處理器0.1availableProcessors()返回1爲dualcore電話

信息出於好奇,我檢查了相同在我朋友的三星Galaxy S2中,這又是一款雙核手機。這也表明沒有。的核心是1.

我檢查了同樣在我的Moto xoom平板電腦,這又是雙核心。這次availableProcessors()返回2,cpuinfo也有處理器0和處理器1的細節。

我很困惑。爲什麼有些設備會傳送不同的信有人可以解釋這種異常嗎?

回答

16

Runtime.getRuntime().availableProcessors()只返回在線處理器的數量,所以當第二個核心處於休眠狀態時它將返回1。這是爲了在較少資源密集型任務期間保存電力。

要查看所有可用的內核,看看/ SYS /設備/系統/ CPU/

+0

我是這麼認爲的。但爲什麼/ proc/cpuinfo文件似乎在第二個核心上缺少信息?另外,有沒有辦法打開另一個核心,然後使用相同的Java方法檢查這個? – M10TheMist 2012-04-13 00:28:25

+0

/proc/cpuinfo只顯示在線核心。要查看所有可用的內核,請查看/ sys/devices/system/cpu /。不幸的是,不,你不能通過你的應用程序打開第二個核心。 – lrAndroid 2012-04-13 00:29:44

+0

謝謝IrAndroid ..完美! – M10TheMist 2012-04-13 01:12:46

0

這將讓你在Android的內核數量(基於this post):

public static int getCoresCount() 
    { 
    class CpuFilter implements FileFilter 
     { 
     @Override 
     public boolean accept(final File pathname) 
     { 
     if(Pattern.matches("cpu[0-9]+",pathname.getName())) 
      return true; 
     return false; 
     } 
     } 
    try 
     { 
     final File dir=new File("/sys/devices/system/cpu/"); 
     final File[] files=dir.listFiles(new CpuFilter()); 
     return files.length; 
     } 
    catch(final Exception e) 
     { 
     return Math.max(1,Runtime.getRuntime().availableProcessors()); 
     } 
    }