Package com.fasterxml.jackson.core.sym
Class ByteQuadsCanonicalizer
- java.lang.Object
-
- com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer
-
public final class ByteQuadsCanonicalizer extends java.lang.Object
Replacement forBytesToNameCanonicalizer
which aims at more localized memory access due to flattening of name quad data. Performance improvement modest for simple JSON document data binding (maybe 3%), but should help more for larger symbol tables, or for binary formats like Smile.Hash area is divided into 4 sections:
- Primary area (1/2 of total size), direct match from hash (LSB)
- Secondary area (1/4 of total size), match from
hash (LSB) >> 1
- Tertiary area (1/8 of total size), match from
hash (LSB) >> 2
- Spill-over area (remaining 1/8) with linear scan, insertion order
int
s, where 1 - 3 ints contain 1 - 12 UTF-8 encoded bytes of name (null-padded), and last int is offset in_names
that contains actual name Strings.- Since:
- 2.6
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.String
addName(java.lang.String name, int q1)
java.lang.String
addName(java.lang.String name, int[] q, int qlen)
java.lang.String
addName(java.lang.String name, int q1, int q2)
java.lang.String
addName(java.lang.String name, int q1, int q2, int q3)
int
bucketCount()
Returns number of primary slots table has currentlyint
calcHash(int q1)
int
calcHash(int[] q, int qlen)
int
calcHash(int q1, int q2)
int
calcHash(int q1, int q2, int q3)
static ByteQuadsCanonicalizer
createRoot()
Factory method to call to create a symbol table instance with a randomized seed value.java.lang.String
findName(int q1)
java.lang.String
findName(int[] q, int qlen)
java.lang.String
findName(int q1, int q2)
java.lang.String
findName(int q1, int q2, int q3)
int
hashSeed()
ByteQuadsCanonicalizer
makeChild(int flags)
Factory method used to create actual symbol table instance to use for parsing.boolean
maybeDirty()
Method called to check to quickly see if a child symbol table may have gotten additional entries.int
primaryCount()
Method mostly needed by unit tests; calculates number of entries that are in the primary slot set.void
release()
Method called by the using code to indicate it is done with this instance.int
secondaryCount()
Method mostly needed by unit tests; calculates number of entries in secondary bucketsint
size()
int
spilloverCount()
Method mostly needed by unit tests; calculates number of entries in shared spillover areaint
tertiaryCount()
Method mostly needed by unit tests; calculates number of entries in tertiary bucketsjava.lang.String
toString()
int
totalCount()
-
-
-
Method Detail
-
createRoot
public static ByteQuadsCanonicalizer createRoot()
Factory method to call to create a symbol table instance with a randomized seed value.
-
makeChild
public ByteQuadsCanonicalizer makeChild(int flags)
Factory method used to create actual symbol table instance to use for parsing.
-
release
public void release()
Method called by the using code to indicate it is done with this instance. This lets instance merge accumulated changes into parent (if need be), safely and efficiently, and without calling code having to know about parent information.
-
size
public int size()
-
bucketCount
public int bucketCount()
Returns number of primary slots table has currently
-
maybeDirty
public boolean maybeDirty()
Method called to check to quickly see if a child symbol table may have gotten additional entries. Used for checking to see if a child table should be merged into shared table.
-
hashSeed
public int hashSeed()
-
primaryCount
public int primaryCount()
Method mostly needed by unit tests; calculates number of entries that are in the primary slot set. These are "perfect" entries, accessible with a single lookup
-
secondaryCount
public int secondaryCount()
Method mostly needed by unit tests; calculates number of entries in secondary buckets
-
tertiaryCount
public int tertiaryCount()
Method mostly needed by unit tests; calculates number of entries in tertiary buckets
-
spilloverCount
public int spilloverCount()
Method mostly needed by unit tests; calculates number of entries in shared spillover area
-
totalCount
public int totalCount()
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
findName
public java.lang.String findName(int q1)
-
findName
public java.lang.String findName(int q1, int q2)
-
findName
public java.lang.String findName(int q1, int q2, int q3)
-
findName
public java.lang.String findName(int[] q, int qlen)
-
addName
public java.lang.String addName(java.lang.String name, int q1)
-
addName
public java.lang.String addName(java.lang.String name, int q1, int q2)
-
addName
public java.lang.String addName(java.lang.String name, int q1, int q2, int q3)
-
addName
public java.lang.String addName(java.lang.String name, int[] q, int qlen)
-
calcHash
public int calcHash(int q1)
-
calcHash
public int calcHash(int q1, int q2)
-
calcHash
public int calcHash(int q1, int q2, int q3)
-
calcHash
public int calcHash(int[] q, int qlen)
-
-