做二手房产网站多少钱,华为公司网站建设受众是,售后服务网点建设是指网站,上海高端网站建设服务器运用java内存对齐填充#xff0c;对java内存进行8字节划分#xff0c;java对象指针映射到每个划分区域上#xff0c;使得4个字节#xff08;32位#xff09;表示2^32个地址#xff0c;从而使4个字节指针映射32G内存空间。 1.为什么进行指针压缩#xff1a;
jvm从32位变… 运用java内存对齐填充对java内存进行8字节划分java对象指针映射到每个划分区域上使得4个字节32位表示2^32个地址从而使4个字节指针映射32G内存空间。 1.为什么进行指针压缩
jvm从32位变为64位内存带宽也增加了一倍原来32位存储一个变量现在可以使用64位存储无形中浪费了大量空间。占用较大带宽同时GC也会承受较大压力。.为了减少64位平台下内存的消耗启用指针压缩功能在jvm中32位地址最大支持4G内存(2的32次方)可以通过对对象指针的压缩编码、解码方式进行优化使得jvm 只用32位地址就可以支持更大的内存配置(小于等于32G)堆内存小于4G时不需要启用指针压缩jvm会直接去除高32位地址即使用低虚拟地址空间堆内存大于32G时压缩指针会失效会强制使用64位(即8字节)来对java对象寻址这就会出现1的问题所以堆内 存不要大于32G为好
2.开启关闭对象指针压缩
jdk1.6 update14开始在64bit操作系统中JVM支持指针压缩。
启用指针压缩:-XX:UseCompressedOops(默认开启)禁止指针压缩:-XX:-UseCompressedOops
对象大小可以用jol-core包查看引入依赖
implementation group: org.openjdk.jol, name: jol-core, version: 0.9package com;import org.openjdk.jol.info.ClassLayout;public class JOLSample {public static void main(String[] args){ClassLayout layout ClassLayout.parseInstance(new Object());System.out.println(layout.toPrintable());System.out.println();ClassLayout layout1 ClassLayout.parseInstance(new int[]{});System.out.println(layout1.toPrintable());System.out.println();ClassLayout layout2 ClassLayout.parseInstance(new A());System.out.println(layout2.toPrintable());}public static class A {int id;String name;byte b;Object o;}
}
配置关闭指针压缩打印
# WARNING: Unable to get Instrumentation. Dynamic Attach failed. You may add this JAR as -javaagent manually, or supply -Djdk.attach.allowAttachSelf
java.lang.Object object internals:OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 05 00 00 00 (00000101 00000000 00000000 00000000) (5)4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)8 4 (object header) 50 1f c4 30 (01010000 00011111 11000100 00110000) (818159440)12 4 (object header) a0 01 00 00 (10100000 00000001 00000000 00000000) (416)
Instance size: 16 bytes
Space losses: 0 bytes internal 0 bytes external 0 bytes total[I object internals:OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)8 4 (object header) 10 0c c4 30 (00010000 00001100 11000100 00110000) (818154512)12 4 (object header) a0 01 00 00 (10100000 00000001 00000000 00000000) (416)16 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)20 4 (alignment/padding gap) 24 0 int [I.elements N/A
Instance size: 24 bytes
Space losses: 4 bytes internal 0 bytes external 4 bytes totalcom.JOLSample$A object internals:OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 05 00 00 00 (00000101 00000000 00000000 00000000) (5)4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)8 4 (object header) 08 78 45 32 (00001000 01111000 01000101 00110010) (843413512)12 4 (object header) a0 01 00 00 (10100000 00000001 00000000 00000000) (416)16 4 int A.id 020 1 byte A.b 021 3 (alignment/padding gap) 24 8 java.lang.String A.name null32 8 java.lang.Object A.o null
Instance size: 40 bytes
Space losses: 3 bytes internal 0 bytes external 3 bytes total
开启指针压缩
# WARNING: Unable to get Instrumentation. Dynamic Attach failed. You may add this JAR as -javaagent manually, or supply -Djdk.attach.allowAttachSelf
java.lang.Object object internals:OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 05 00 00 00 (00000101 00000000 00000000 00000000) (5)4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)8 4 (object header) 00 10 00 00 (00000000 00010000 00000000 00000000) (4096)12 4 (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal 4 bytes external 4 bytes total[I object internals:OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)8 4 (object header) 10 0c 00 00 (00010000 00001100 00000000 00000000) (3088)12 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)16 0 int [I.elements N/A
Instance size: 16 bytes
Space losses: 0 bytes internal 0 bytes external 0 bytes totalcom.JOLSample$A object internals:OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 05 00 00 00 (00000101 00000000 00000000 00000000) (5)4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)8 4 (object header) a8 e9 0d 00 (10101000 11101001 00001101 00000000) (911784)12 4 int A.id 016 1 byte A.b 017 3 (alignment/padding gap) 20 4 java.lang.String A.name null24 4 java.lang.Object A.o null28 4 (loss due to the next object alignment)
Instance size: 32 bytes
Space losses: 3 bytes internal 4 bytes external 7 bytes total
通过指针压缩类型指针、对象引用等由8字节转为4个字节。降低对象占用的内存大小顺便减轻GC压力当指针移动时减少带宽损耗。