mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
performance optimize ,cache integer/long valueof
This commit is contained in:
@@ -4,6 +4,8 @@ import java.io.Serializable;
|
|||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.sql.Types;
|
import java.sql.Types;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.zone.ZoneRules;
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
@@ -24,7 +26,11 @@ import com.taobao.tddl.dbsync.binlog.LogEvent;
|
|||||||
*/
|
*/
|
||||||
public final class RowsLogBuffer {
|
public final class RowsLogBuffer {
|
||||||
|
|
||||||
protected static final Log logger = LogFactory.getLog(RowsLogBuffer.class);
|
protected static final Log logger = LogFactory.getLog(RowsLogBuffer.class);
|
||||||
|
public static final Long[] longCache = new Long[1024 * 128];
|
||||||
|
public static final int longCacheLimit = longCache.length + 127;
|
||||||
|
public static final Integer[] integerCache = new Integer[1024 * 128];
|
||||||
|
public static final int integerCacheLimit = longCache.length + 127;
|
||||||
|
|
||||||
public static final long DATETIMEF_INT_OFS = 0x8000000000L;
|
public static final long DATETIMEF_INT_OFS = 0x8000000000L;
|
||||||
public static final long TIMEF_INT_OFS = 0x800000L;
|
public static final long TIMEF_INT_OFS = 0x800000L;
|
||||||
@@ -310,7 +316,7 @@ public final class RowsLogBuffer {
|
|||||||
// XXX: How to check signed / unsigned?
|
// XXX: How to check signed / unsigned?
|
||||||
// value = unsigned ? Long.valueOf(buffer.getUint32()) :
|
// value = unsigned ? Long.valueOf(buffer.getUint32()) :
|
||||||
// Integer.valueOf(buffer.getInt32());
|
// Integer.valueOf(buffer.getInt32());
|
||||||
value = Integer.valueOf(buffer.getInt32());
|
value = valueOf(buffer.getInt32());
|
||||||
javaType = Types.INTEGER;
|
javaType = Types.INTEGER;
|
||||||
length = 4;
|
length = 4;
|
||||||
break;
|
break;
|
||||||
@@ -319,7 +325,7 @@ public final class RowsLogBuffer {
|
|||||||
// XXX: How to check signed / unsigned?
|
// XXX: How to check signed / unsigned?
|
||||||
// value = Integer.valueOf(unsigned ? buffer.getUint8() :
|
// value = Integer.valueOf(unsigned ? buffer.getUint8() :
|
||||||
// buffer.getInt8());
|
// buffer.getInt8());
|
||||||
value = Integer.valueOf(buffer.getInt8());
|
value = valueOf(buffer.getInt8());
|
||||||
javaType = Types.TINYINT; // java.sql.Types.INTEGER;
|
javaType = Types.TINYINT; // java.sql.Types.INTEGER;
|
||||||
length = 1;
|
length = 1;
|
||||||
break;
|
break;
|
||||||
@@ -328,7 +334,7 @@ public final class RowsLogBuffer {
|
|||||||
// XXX: How to check signed / unsigned?
|
// XXX: How to check signed / unsigned?
|
||||||
// value = Integer.valueOf(unsigned ? buffer.getUint16() :
|
// value = Integer.valueOf(unsigned ? buffer.getUint16() :
|
||||||
// buffer.getInt16());
|
// buffer.getInt16());
|
||||||
value = Integer.valueOf((short) buffer.getInt16());
|
value = valueOf((short) buffer.getInt16());
|
||||||
javaType = Types.SMALLINT; // java.sql.Types.INTEGER;
|
javaType = Types.SMALLINT; // java.sql.Types.INTEGER;
|
||||||
length = 2;
|
length = 2;
|
||||||
break;
|
break;
|
||||||
@@ -337,7 +343,7 @@ public final class RowsLogBuffer {
|
|||||||
// XXX: How to check signed / unsigned?
|
// XXX: How to check signed / unsigned?
|
||||||
// value = Integer.valueOf(unsigned ? buffer.getUint24() :
|
// value = Integer.valueOf(unsigned ? buffer.getUint24() :
|
||||||
// buffer.getInt24());
|
// buffer.getInt24());
|
||||||
value = Integer.valueOf(buffer.getInt24());
|
value = valueOf(buffer.getInt24());
|
||||||
javaType = Types.INTEGER;
|
javaType = Types.INTEGER;
|
||||||
length = 3;
|
length = 3;
|
||||||
break;
|
break;
|
||||||
@@ -346,7 +352,7 @@ public final class RowsLogBuffer {
|
|||||||
// XXX: How to check signed / unsigned?
|
// XXX: How to check signed / unsigned?
|
||||||
// value = unsigned ? buffer.getUlong64()) :
|
// value = unsigned ? buffer.getUlong64()) :
|
||||||
// Long.valueOf(buffer.getLong64());
|
// Long.valueOf(buffer.getLong64());
|
||||||
value = Long.valueOf(buffer.getLong64());
|
value = valueOf(buffer.getLong64());
|
||||||
javaType = Types.BIGINT; // Types.INTEGER;
|
javaType = Types.BIGINT; // Types.INTEGER;
|
||||||
length = 8;
|
length = 8;
|
||||||
break;
|
break;
|
||||||
@@ -871,7 +877,7 @@ public final class RowsLogBuffer {
|
|||||||
}
|
}
|
||||||
// logger.warn("MYSQL_TYPE_ENUM : This enumeration value is "
|
// logger.warn("MYSQL_TYPE_ENUM : This enumeration value is "
|
||||||
// + "only used internally and cannot exist in a binlog!");
|
// + "only used internally and cannot exist in a binlog!");
|
||||||
value = Integer.valueOf(int32);
|
value = valueOf(int32);
|
||||||
javaType = Types.INTEGER;
|
javaType = Types.INTEGER;
|
||||||
length = len;
|
length = len;
|
||||||
break;
|
break;
|
||||||
@@ -1212,4 +1218,38 @@ public final class RowsLogBuffer {
|
|||||||
builder.append('0').append(digits[d]);
|
builder.append('0').append(digits[d]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Long valueOf(long value) {
|
||||||
|
if (value >= -128 & value <= 127) {
|
||||||
|
// if (l >= -128 && l <= 127) {
|
||||||
|
return Long.valueOf(value);
|
||||||
|
}
|
||||||
|
if (value > 127 && value < longCacheLimit) {
|
||||||
|
int cacheIndex = (int) value - 127;
|
||||||
|
Long cacheValue = longCache[cacheIndex];
|
||||||
|
if (cacheValue == null) {
|
||||||
|
cacheValue = new Long(value);
|
||||||
|
longCache[cacheIndex] = cacheValue;
|
||||||
|
}
|
||||||
|
return cacheValue;
|
||||||
|
}
|
||||||
|
return new Long(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Integer valueOf(int value) {
|
||||||
|
if (value >= -128 & value <= 127) {
|
||||||
|
// if (l >= -128 && l <= 127) {
|
||||||
|
return Integer.valueOf(value);
|
||||||
|
}
|
||||||
|
if (value > 127 && value < integerCacheLimit) {
|
||||||
|
int cacheIndex = (int) value - 127;
|
||||||
|
Integer cacheValue = integerCache[cacheIndex];
|
||||||
|
if (cacheValue == null) {
|
||||||
|
cacheValue = new Integer(value);
|
||||||
|
integerCache[cacheIndex] = cacheValue;
|
||||||
|
}
|
||||||
|
return cacheValue;
|
||||||
|
}
|
||||||
|
return new Integer(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user