1.编程学习.txt

UP 返回
1. JDK里面默认的集合元素类型均为对象,实际很多场景存储的是基本数据类型数据。对于这些场景,如果使用jdk的原生集合会将其包装成对象,造成内存的浪费和GC的压力。很多开源组件都有对应的高性能集合实现。使用基本数据类型代替包装类,例如netty fastutil和ES hppc
  本文主要使用es hppc的高性能集合实现,优化推荐引擎性能
  java一个空object对象至少占16字节(64位开启指针压缩)。其中markword占8个字节,类元指针占4个字节,对齐填充占4个字节。java中一个空string占用内存大小
	reference/4+object header/8+cahr[]/16+int/4+char reference/4+padding/4=40byte
  因此如果我们将集合的包装类转为基本数据类型,string转为基本数据类型,内存将节省50%以上。而对于gc,很大一部分时间都消耗在对象拷贝上,减少对象大小也会大大降低这一部分时延
        <dependency>
            <groupId>com.carrotsearch</groupId>
            <artifactId>hppc</artifactId>
            <version>0.9.0</version>
        </dependency>
	
	    public static void main(String[] args) {
	        System.setProperty("java.vm.name", "Java HotSpot(TM) ");
	        FloatArrayList floatArrayList = new FloatArrayList();
	        List<Float> floatList = new ArrayList<>();
	        for (int i = 0; i < 10000; i++) {
	            floatArrayList.add((float) i);
	            floatList.add((float) i);
	        }
	        System.out.println(ObjectSizeCalculator.getObjectSize(floatArrayList));
	        System.out.println(ObjectSizeCalculator.getObjectSize(floatList));
	    }

	!!@@202503021.img_1245_641_1@@!!
DOWN 返回