明天老王要给我们讲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("", "1:1;2:2;3:3", "sku-1"));
skus.add(new Sku("", "1:1;2:2;3:3", "sku-2"));
skus.add(new Sku("", "1:1;2:2;3:3", "sku-3"));
skus.add(new Sku("", "1:1;2:2;3:3", "sku-4")); Map<SkuKey, Sku> skuByKey = new HashMap<>();
for(int i = ; i< *; 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的深入研究!

JVM培训序幕篇的更多相关文章

  1. JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇

    JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇 作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题).我们也知道我们Java程序 ...

  2. JVM培训之一些GC算法的理论知识

    很精彩的一次内部分享,介绍了大部分的GC算法理论知识,JVM博大精深,本篇文章只是结合本次内部分享总结的一些理论知识,如果有大佬有疑问,欢迎留言指出! Concurrent:并发,程序一边运行一边做G ...

  3. 初步了解JVM第三篇(堆和GC回收算法)

    在<初步了解JVM第一篇>和<初步了解JVM第二篇>中,分别介绍了: 类加载器:负责加载*.class文件,将字节码内容加载到内存中.其中类加载器的类型有如下:执行引擎:负责解 ...

  4. 总结《深入理解JVM》 G1 篇

    注:一下内容主要结合<深入理解JVM>3th总结而来. 接上一篇,我们来说说G1,G1作为现在的主要的JVM GC,被作为各大互联网主要使用的垃圾回收器,了解G1回回收原理和回收过程,才能 ...

  5. JVM 第六篇:极致优化 IDEA 启动速度

    本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 引言 相信做 Java 开发的同学,对 IDEA 这个工具应该都不陌生,即使不使用 IDEA 做开发,那么对 Eclipse 这个工具应该 ...

  6. 【JVM第六篇--对象】对象的实例化、内存布局和访问定位

    写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.对象的实例化 在平常写代码的过程中,我们用class关键字定义的类只是一个类的模 ...

  7. 深入理解Java虚拟机之JVM内存布局篇

    内存布局**** ​ JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...

  8. JVM培训作业第二周

    1. jre的运行时主要jar文件rt.jar都很大,这导致了用java做的桌面客户端程序很难发布绑定jre发布.这在很大程度上限制了java桌面软件 的分发.可是,jre并不是在所有的用户计算机上都 ...

  9. 【Java面试必备JVM】JVM看这篇就够了

    链接–>JVM

随机推荐

  1. js中公有方法、特权方法、静态方法

    1.公有属性和公有方法 1 2 3 4 5 6 7 8 9 function User(name,age){   this.name = name;//公有属性   this.age = age; } ...

  2. lua之m进制转换为n进制-任意进制转换算法

    够无聊的写这个,为防止需要的人也无聊一遍,写个吧 算法有n种,但是,咱们一种就够用了 --数组倒序排列 local function orderByDesc( input ) local output ...

  3. MATLAB入门学习(五)

    现在,我们来学画图吧.╭( ・ㅂ・)و ̑̑ 绘制函数图像最常用的命令是plot plot(x,y,s)x,y为同维向量,绘制分别以x为横坐标,y为纵坐标的曲线 如果x y 是矩阵的话则会绘制多条曲线 ...

  4. WAS上配置数据源连接失败

    问题描述: 在节点 cnshh171Node01 上的服务器 server1 上, 对数据源 testj2cbug 执行的测试连接操作 由于以下异常 java.sql.SQLException: 调用 ...

  5. UVa 10048 - Audiophobia(Floyd变形)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. 计算机名称和IP地址

    获取本地IP地址 得到远程机IP地址与描述 若仅仅是查看IP地址

  7. C#XML格式字符串取节点数据

    XML格式的字符串: <xml><return_code><![CDATA[{0}]]></return_code><return_msg> ...

  8. oracle 导出空表问题

    select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0

  9. Redis(RedisTemplate)使用string字符串

    RedisTemplate配置:https://www.cnblogs.com/weibanggang/p/10188682.html ApplicationContext applicationCo ...

  10. #warning Incomplete method implementation怎么修改?

    #warning Incomplete method implementation怎么修改?       各位朋友,我在做一个表格视图的例子,在tableview方法里总有几个warning:#war ...