Class AbstractCentralProcessor
- All Implemented Interfaces:
CentralProcessor
- Direct Known Subclasses:
FreeBsdCentralProcessor
,LinuxCentralProcessor
,MacCentralProcessor
,SolarisCentralProcessor
,WindowsCentralProcessor
public abstract class AbstractCentralProcessor extends java.lang.Object implements CentralProcessor
-
Nested Class Summary
Nested classes/interfaces inherited from interface oshi.hardware.CentralProcessor
CentralProcessor.LogicalProcessor, CentralProcessor.ProcessorIdentifier, CentralProcessor.TickType
-
Constructor Summary
Constructors Constructor Description AbstractCentralProcessor()
Create a Processor -
Method Summary
Modifier and Type Method Description 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.long
getContextSwitches()
Get the number of context switches which have occurredlong[]
getCurrentFreq()
Attempts to return the current frequency (in Hz), of the logical processors on this CPU.java.lang.String
getFamily()
Gets the family.java.lang.String
getIdentifier()
Identifier, eg.long
getInterrupts()
Get the number of interrupts which have occurredint
getLogicalProcessorCount()
Get the number of logical CPUs available for processing.CentralProcessor.LogicalProcessor[]
getLogicalProcessors()
Returns an array of the CPU's logical processors.long
getMaxFreq()
Maximum frequeny (in Hz), of the logical processors on this CPU.java.lang.String
getModel()
Gets the model.java.lang.String
getName()
Name, eg.int
getPhysicalPackageCount()
Get the number of packages/sockets in the system.int
getPhysicalProcessorCount()
Get the number of physical CPUs/cores available for processing.double[]
getProcessorCpuLoadBetweenTicks(long[][] oldTicks)
Returns the "recent cpu usage" for all logical processors by counting ticks fromCentralProcessor.getProcessorCpuLoadTicks()
between the user-provided value from a previous call.long[][]
getProcessorCpuLoadTicks()
Get Processor CPU Load tick counters.java.lang.String
getProcessorID()
Gets the Processor ID.CentralProcessor.ProcessorIdentifier
getProcessorIdentifier()
The CPU's identifier strings ,including name, vendor, stepping, model, and family information (also called the signature of a CPU)java.lang.String
getStepping()
Gets the stepping.double
getSystemCpuLoadBetweenTicks(long[] oldTicks)
Returns the "recent cpu usage" for the whole system by counting ticks fromCentralProcessor.getSystemCpuLoadTicks()
between the user-provided value from a previous call.long[]
getSystemCpuLoadTicks()
Get System-wide CPU Load tick counters.java.lang.String
getVendor()
Processor vendor.long
getVendorFreq()
Vendor frequency (in Hz), eg.protected abstract CentralProcessor.LogicalProcessor[]
initProcessorCounts()
Updates logical and physical processor counts and arraysboolean
isCpu64bit()
Is CPU 64bit?protected abstract long
queryContextSwitches()
Get number of context switchesprotected abstract long[]
queryCurrentFreq()
Get processor current frequency.protected abstract long
queryInterrupts()
Get number of interruptsprotected abstract long
queryMaxFreq()
Get processor max frequency.protected abstract long[][]
queryProcessorCpuLoadTicks()
Get the processor CPU load ticksprotected abstract CentralProcessor.ProcessorIdentifier
queryProcessorId()
Updates logical and physical processor counts and arraysprotected abstract long[]
querySystemCpuLoadTicks()
Get the system CPU load ticksjava.lang.String
toString()
-
Constructor Details
-
AbstractCentralProcessor
public AbstractCentralProcessor()Create a Processor
-
-
Method Details
-
initProcessorCounts
Updates logical and physical processor counts and arrays- Returns:
- An array of initialized Logical Processors
-
queryProcessorId
Updates logical and physical processor counts and arrays- Returns:
- An array of initialized Logical Processors
-
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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 byCentralProcessor.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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- Returns:
- Processor identifier.
-
isCpu64bit
public boolean isCpu64bit()Description copied from interface:CentralProcessor
Is CPU 64bit?- Specified by:
isCpu64bit
in interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- Returns:
- The number of interrupts
-
queryInterrupts
protected abstract long queryInterrupts()Get number of interrupts- Returns:
- The interrupts
-
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 interfaceCentralProcessor
- 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. UseCentralProcessor.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 interfaceCentralProcessor
- 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, withCentralProcessor.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. UseCentralProcessor.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 interfaceCentralProcessor
- 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 fromCentralProcessor.getSystemCpuLoadTicks()
between the user-provided value from a previous call.- Specified by:
getSystemCpuLoadBetweenTicks
in interfaceCentralProcessor
- Parameters:
oldTicks
- A tick array from a previous call toCentralProcessor.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 fromCentralProcessor.getProcessorCpuLoadTicks()
between the user-provided value from a previous call.- Specified by:
getProcessorCpuLoadBetweenTicks
in interfaceCentralProcessor
- Parameters:
oldTicks
- A tick array from a previous call toCentralProcessor.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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 interfaceCentralProcessor
- 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 steppingmodel
- The CPU modelfamily
- The CPU familyflags
- A space-delimited list of CPU feature flags- Returns:
- The Processor ID string
-
toString
public java.lang.String toString()- Overrides:
toString
in classjava.lang.Object
-