You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2021/10/27 14:05:52 UTC
[hbase] branch branch-2.4 updated: HBASE-26392 Update
ClassSize.BYTE_BUFFER for JDK17 (#3784)
This is an automated email from the ASF dual-hosted git repository.
zhangduo pushed a commit to branch branch-2.4
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.4 by this push:
new f382086 HBASE-26392 Update ClassSize.BYTE_BUFFER for JDK17 (#3784)
f382086 is described below
commit f382086ca294475804b2417457172dfed1e647ac
Author: Yutong Xiao <yu...@gmail.com>
AuthorDate: Wed Oct 27 22:02:59 2021 +0800
HBASE-26392 Update ClassSize.BYTE_BUFFER for JDK17 (#3784)
Signed-off-by: Duo Zhang <zh...@apache.org>
---
.../java/org/apache/hadoop/hbase/util/ClassSize.java | 6 +++++-
.../main/java/org/apache/hadoop/hbase/util/JVM.java | 19 +++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java
index ebb9001..0161fa7 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java
@@ -256,7 +256,11 @@ public class ClassSize {
LINKEDLIST_ENTRY = align(OBJECT + (2 * REFERENCE));
//noinspection PointlessArithmeticExpression
- BYTE_BUFFER = align(OBJECT + REFERENCE +
+ BYTE_BUFFER = JVM.getJVMSpecVersion() < 17 ?
+ align(OBJECT + REFERENCE +
+ (5 * Bytes.SIZEOF_INT) +
+ (3 * Bytes.SIZEOF_BOOLEAN) + Bytes.SIZEOF_LONG) + align(ARRAY) :
+ align(OBJECT + 2 * REFERENCE +
(5 * Bytes.SIZEOF_INT) +
(3 * Bytes.SIZEOF_BOOLEAN) + Bytes.SIZEOF_LONG) + align(ARRAY);
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/JVM.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/JVM.java
index 6657481..8bd70e4 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/JVM.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/JVM.java
@@ -61,6 +61,21 @@ public class JVM {
private static final String JVMVersion = System.getProperty("java.version");
/**
+ * The raw String of java specification version.
+ * "1.8" for java8, "9","10"... for Java 9, 10...
+ */
+ private static final String JVM_SPEC_VERSION_STRING =
+ System.getProperty("java.specification.version");
+
+ /**
+ * The Integer represent of JVM_SPEC_VERSION, for the JVM version comparison.
+ * Java 8, 9, 10 ... will be noted as 8, 9 10 ...
+ */
+ private static final int JVM_SPEC_VERSION = JVM_SPEC_VERSION_STRING.contains(".") ?
+ (int) (Float.parseFloat(JVM_SPEC_VERSION_STRING) * 10 % 10) :
+ Integer.parseInt(JVM_SPEC_VERSION_STRING);
+
+ /**
* Constructor. Get the running Operating System instance
*/
public JVM() {
@@ -106,6 +121,10 @@ public class JVM {
return ibmvendor && JVMVersion.contains("1.6.0");
}
+ public static int getJVMSpecVersion() {
+ return JVM_SPEC_VERSION;
+ }
+
/**
* Load the implementation of UnixOperatingSystemMXBean for Oracle jvm
* and runs the desired method.