JVM培训序幕篇
程序员文章站
2022-07-10 11:13:59
明天老王要给我们讲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了
基于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的深入研究!