Class AbstractCentralProcessor

java.lang.Object
oshi.hardware.common.AbstractCentralProcessor
All Implemented Interfaces:
CentralProcessor
Direct Known Subclasses:
FreeBsdCentralProcessor, LinuxCentralProcessor, MacCentralProcessor, SolarisCentralProcessor, WindowsCentralProcessor

public abstract class AbstractCentralProcessor
extends java.lang.Object
implements CentralProcessor
A CPU.
  • Constructor Details

  • Method Details

    • initProcessorCounts

      protected abstract CentralProcessor.LogicalProcessor[] initProcessorCounts()
      Updates logical and physical processor counts and arrays
      Returns:
      An array of initialized Logical Processors
    • queryProcessorId

      protected abstract CentralProcessor.ProcessorIdentifier queryProcessorId()
      Updates logical and physical processor counts and arrays
      Returns:
      An array of initialized Logical Processors
    • getProcessorIdentifier

      public CentralProcessor.ProcessorIdentifier getProcessorIdentifier()
      Description copied from interface: CentralProcessor
      The CPU's identifier strings ,including name, vendor, stepping, model, and family information (also called the signature of a CPU)
      Specified by:
      getProcessorIdentifier in interface CentralProcessor
      Returns:
      a CentralProcessor.ProcessorIdentifier object encapsulating CPU identifier information.
    • getVendor

      public java.lang.String getVendor()
      Description copied from interface: CentralProcessor
      Processor vendor.
      Specified by:
      getVendor in interface CentralProcessor
      Returns:
      vendor string.
    • getName

      public java.lang.String getName()
      Description copied from interface: CentralProcessor
      Name, eg. Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
      Specified by:
      getName in interface CentralProcessor
      Returns:
      Processor name.
    • getFamily

      public java.lang.String getFamily()
      Description copied from interface: CentralProcessor
      Gets the family. For non-Intel/AMD processors, returns the comparable value, such as the Architecture.
      Specified by:
      getFamily in interface CentralProcessor
      Returns:
      the family
    • getModel

      public java.lang.String getModel()
      Description copied from interface: CentralProcessor
      Gets the model. For non-Intel/AMD processors, returns the comparable value, such as the Partnum.
      Specified by:
      getModel in interface CentralProcessor
      Returns:
      the model
    • getStepping

      public java.lang.String getStepping()
      Description copied from interface: CentralProcessor
      Gets the stepping. For non-Intel/AMD processors, returns the comparable value, such as the rnpn composite of Variant and Revision.
      Specified by:
      getStepping in interface CentralProcessor
      Returns:
      the stepping
    • getProcessorID

      public java.lang.String getProcessorID()
      Description copied from interface: CentralProcessor
      Gets the Processor ID. This is a hexidecimal string representing an 8-byte value, normally obtained using the CPUID opcode with the EAX register set to 1. The first four bytes are the resulting contents of the EAX register, which is the Processor signature, represented in human-readable form by CentralProcessor.getIdentifier() . The remaining four bytes are the contents of the EDX register, containing feature flags.

      For processors that do not support the CPUID opcode this field is populated with a comparable hex string. For example, ARM Processors will fill the first 32 bytes with the MIDR.

      NOTE: The order of returned bytes is platform and software dependent. Values may be in either Big Endian or Little Endian order.

      NOTE: If OSHI is unable to determine the ProcessorID from native sources, it will attempt to reconstruct one from available information in the processor identifier.

      Specified by:
      getProcessorID in interface CentralProcessor
      Returns:
      A string representing the Processor ID
    • getIdentifier

      public java.lang.String getIdentifier()
      Description copied from interface: CentralProcessor
      Identifier, eg. x86 Family 6 Model 15 Stepping 10. For non-Intel/AMD processors, this string is populated with comparable values.
      Specified by:
      getIdentifier in interface CentralProcessor
      Returns:
      Processor identifier.
    • isCpu64bit

      public boolean isCpu64bit()
      Description copied from interface: CentralProcessor
      Is CPU 64bit?
      Specified by:
      isCpu64bit in interface CentralProcessor
      Returns:
      True if cpu is 64bit.
    • getVendorFreq

      public long getVendorFreq()
      Description copied from interface: CentralProcessor
      Vendor frequency (in Hz), eg. for processor named Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz the vendor frequency is 2000000000.
      Specified by:
      getVendorFreq in interface CentralProcessor
      Returns:
      Processor frequency or -1 if unknown.
    • getMaxFreq

      public long getMaxFreq()
      Description copied from interface: CentralProcessor
      Maximum frequeny (in Hz), of the logical processors on this CPU.
      Specified by:
      getMaxFreq in interface CentralProcessor
      Returns:
      The max frequency or -1 if unknown.
    • queryMaxFreq

      protected abstract long queryMaxFreq()
      Get processor max frequency.
      Returns:
      The max frequency.
    • getCurrentFreq

      public long[] getCurrentFreq()
      Description copied from interface: CentralProcessor
      Attempts to return the current frequency (in Hz), of the logical processors on this CPU.

      May not be implemented on all Operating Systems.

      On Windows, returns an estimate based on the percent of maximum frequency. On Windows systems with more than 64 logical processors, may only return frequencies for the current processor group in the first portion of the array.

      Specified by:
      getCurrentFreq in interface CentralProcessor
      Returns:
      An array of processor frequencies for each logical processor on the system. Use the CentralProcessor.getLogicalProcessors() to correlate these frequencies with physical packages and processors.
    • queryCurrentFreq

      protected abstract long[] queryCurrentFreq()
      Get processor current frequency.
      Returns:
      The current frequency.
    • getContextSwitches

      public long getContextSwitches()
      Description copied from interface: CentralProcessor
      Get the number of context switches which have occurred
      Specified by:
      getContextSwitches in interface CentralProcessor
      Returns:
      The number of context switches
    • queryContextSwitches

      protected abstract long queryContextSwitches()
      Get number of context switches
      Returns:
      The context switches
    • getInterrupts

      public long getInterrupts()
      Description copied from interface: CentralProcessor
      Get the number of interrupts which have occurred
      Specified by:
      getInterrupts in interface CentralProcessor
      Returns:
      The number of interrupts
    • queryInterrupts

      protected abstract long queryInterrupts()
      Get number of interrupts
      Returns:
      The interrupts
    • getLogicalProcessors

      public CentralProcessor.LogicalProcessor[] getLogicalProcessors()
      Description copied from interface: CentralProcessor
      Returns an array of the CPU's logical processors. The array will be sorted in order of increasing NUMA node number, and then processor number. This order is consistent with other methods providing per-processor results.
      Specified by:
      getLogicalProcessors in interface CentralProcessor
      Returns:
      The logical processor array.
    • getSystemCpuLoadTicks

      public long[] getSystemCpuLoadTicks()
      Description copied from interface: CentralProcessor
      Get System-wide CPU Load tick counters. Returns an array with seven elements representing milliseconds spent in User (0), Nice (1), System (2), Idle (3), IOwait (4), Hardware interrupts (IRQ) (5), Software interrupts/DPC (SoftIRQ) (6), or Steal (7) states. Use CentralProcessor.TickType.getIndex() to retrieve the appropriate index. By measuring the difference between ticks across a time interval, CPU load over that interval may be calculated.

      Note that while tick counters are in units of milliseconds, they may advance in larger increments along with (platform dependent) clock ticks. For example, by default Windows clock ticks are 1/64 of a second (about 15 or 16 milliseconds) and Linux ticks are distribution and configuration dependent but usually 1/100 of a second (10 milliseconds).

      Nice and IOWait information is not available on Windows, and IOwait and IRQ information is not available on macOS, so these ticks will always be zero.

      To calculate overall Idle time using this method, include both Idle and IOWait ticks. Similarly, IRQ, SoftIRQ, and Steal ticks should be added to the System value to get the total. System ticks also include time executing other virtual hosts (steal).

      Specified by:
      getSystemCpuLoadTicks in interface CentralProcessor
      Returns:
      An array of 7 long values representing time spent in User, Nice, System, Idle, IOwait, IRQ, SoftIRQ, and Steal states.
    • querySystemCpuLoadTicks

      protected abstract long[] querySystemCpuLoadTicks()
      Get the system CPU load ticks
      Returns:
      The system CPU load ticks
    • getProcessorCpuLoadTicks

      public long[][] getProcessorCpuLoadTicks()
      Description copied from interface: CentralProcessor
      Get Processor CPU Load tick counters. Returns a two dimensional array, with CentralProcessor.getLogicalProcessorCount() arrays, each containing seven elements representing milliseconds spent in User (0), Nice (1), System (2), Idle (3), IOwait (4), Hardware interrupts (IRQ) (5), Software interrupts/DPC (SoftIRQ) (6), or Steal (7) states. Use CentralProcessor.TickType.getIndex() to retrieve the appropriate index. By measuring the difference between ticks across a time interval, CPU load over that interval may be calculated.

      Note that while tick counters are in units of milliseconds, they may advance in larger increments along with (platform dependent) clock ticks. For example, by default Windows clock ticks are 1/64 of a second (about 15 or 16 milliseconds) and Linux ticks are distribution and configuration dependent but usually 1/100 of a second (10 milliseconds).

      Nice and IOwait per processor information is not available on Windows, and IOwait and IRQ information is not available on macOS, so these ticks will always be zero.

      To calculate overall Idle time using this method, include both Idle and IOWait ticks. Similarly, IRQ, SoftIRQ and Steal ticks should be added to the System value to get the total. System ticks also include time executing other virtual hosts (steal).

      Specified by:
      getProcessorCpuLoadTicks in interface CentralProcessor
      Returns:
      A 2D array of logicalProcessorCount x 7 long values representing time spent in User, Nice, System, Idle, IOwait, IRQ, SoftIRQ, and Steal states.
    • queryProcessorCpuLoadTicks

      protected abstract long[][] queryProcessorCpuLoadTicks()
      Get the processor CPU load ticks
      Returns:
      The processor CPU load ticks
    • getSystemCpuLoadBetweenTicks

      public double getSystemCpuLoadBetweenTicks​(long[] oldTicks)
      Description copied from interface: CentralProcessor
      Returns the "recent cpu usage" for the whole system by counting ticks from CentralProcessor.getSystemCpuLoadTicks() between the user-provided value from a previous call.
      Specified by:
      getSystemCpuLoadBetweenTicks in interface CentralProcessor
      Parameters:
      oldTicks - A tick array from a previous call to CentralProcessor.getSystemCpuLoadTicks()
      Returns:
      CPU load between 0 and 1 (100%)
    • getProcessorCpuLoadBetweenTicks

      public double[] getProcessorCpuLoadBetweenTicks​(long[][] oldTicks)
      Description copied from interface: CentralProcessor
      Returns the "recent cpu usage" for all logical processors by counting ticks from CentralProcessor.getProcessorCpuLoadTicks() between the user-provided value from a previous call.
      Specified by:
      getProcessorCpuLoadBetweenTicks in interface CentralProcessor
      Parameters:
      oldTicks - A tick array from a previous call to CentralProcessor.getProcessorCpuLoadTicks()
      Returns:
      array of CPU load between 0 and 1 (100%) for each logical processor
    • getLogicalProcessorCount

      public int getLogicalProcessorCount()
      Description copied from interface: CentralProcessor
      Get the number of logical CPUs available for processing. This value may be higher than physical CPUs if hyperthreading is enabled.
      Specified by:
      getLogicalProcessorCount in interface CentralProcessor
      Returns:
      The number of logical CPUs available.
    • getPhysicalProcessorCount

      public int getPhysicalProcessorCount()
      Description copied from interface: CentralProcessor
      Get the number of physical CPUs/cores available for processing.
      Specified by:
      getPhysicalProcessorCount in interface CentralProcessor
      Returns:
      The number of physical CPUs available.
    • getPhysicalPackageCount

      public int getPhysicalPackageCount()
      Description copied from interface: CentralProcessor
      Get the number of packages/sockets in the system. A single package may contain multiple cores.
      Specified by:
      getPhysicalPackageCount in interface CentralProcessor
      Returns:
      The number of physical packages available.
    • createProcessorID

      protected java.lang.String createProcessorID​(java.lang.String stepping, java.lang.String model, java.lang.String family, java.lang.String[] flags)
      Creates a Processor ID by encoding the stepping, model, family, and feature flags.
      Parameters:
      stepping - The CPU stepping
      model - The CPU model
      family - The CPU family
      flags - A space-delimited list of CPU feature flags
      Returns:
      The Processor ID string
    • toString

      public java.lang.String toString()
      Overrides:
      toString in class java.lang.Object