欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JVM培训序幕篇

程序员文章站 2022-04-06 13:13:52
明天老王要给我们讲JVM的知识,提前发了一个小Demo给我们看,代码如下: 运行上述代码,结果毫无疑问,电脑瞬间开始狂躁起来,过了十几秒,然后G了 基于JDK1.8运行的,估计老版本会崩的更快。。。 如果不计算内存,这个HashMap一共要插入4000*4000*4个对象,但是其实只有4个是不重复的 ......

明天老王要给我们讲jvm的知识,提前发了一个小demo给我们看,代码如下:

package demo;

import java.util.*;

public class demo {

    public static class skukey {
        private string category;
        private string skuproperties;

        public skukey(string category, string skuproperties) {
            this.category = category;
            this.skuproperties = skuproperties;
        }
    }


    public static class sku{
        string category;
        string skuproperties;
        string name;

        public sku(string category, string skuproperties, string name) {
            this.category = category;
            this.skuproperties = skuproperties;
            this.name = name;
        }
    }

    public static void main(string[] args) {

        list<sku> skus = new arraylist();
        skus.add(new sku("0001", "1:1;2:2;3:3", "sku-1"));
        skus.add(new sku("0002", "1:1;2:2;3:3", "sku-2"));
        skus.add(new sku("0003", "1:1;2:2;3:3", "sku-3"));
        skus.add(new sku("0004", "1:1;2:2;3:3", "sku-4"));

        map<skukey, sku> skubykey = new hashmap<>();
        for(int i = 0; i< 4000*4000; i++) {
            skus.foreach( sku -> skubykey.put(new skukey(sku.category, sku.skuproperties), sku ) );
        }

        system.out.println("build map complete");

    }

}

运行上述代码,结果毫无疑问,电脑瞬间开始狂躁起来,过了十几秒,然后g了

JVM培训序幕篇

基于jdk1.8运行的,估计老版本会崩的更快。。。

如果不计算内存,这个hashmap一共要插入4000*4000*4个对象,但是其实只有4个是不重复的,所以其实我们只要重写hashcode和equals方法就可以解决这个问题了;

    public static class skukey {
        private string category;
        private string skuproperties;

        public skukey(string category, string skuproperties) {
            this.category = category;
            this.skuproperties = skuproperties;
        }
        public int hashcode(){
            return category.hashcode() + skuproperties.hashcode();
        }
        public boolean equals(object obj) {
            skukey skukey = (skukey)obj;
            return this.category.equals(skukey.category) && this.skuproperties.equals(skukey.skuproperties);
        }
    }

等明天培训之后再总结为何以这个为例子来引入jvm的深入研究!