明天老王要给我们讲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. 使用Vaadin的maven archetype创建一个空Vaadin项目

    所在公司要求使用这个臭屎粑粑一样的Vaadin,我也没办法.为了更好地开展工作,对得起老板发给我的工资,就算是臭屎粑粑,也要尽力给他玩儿出花样来. Vaadin针对Eclipse和Netbeans等I ...

  2. Docker的安装及加速

    使用 yum 安装(CentOS 7下) Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname ...

  3. 跨平台c++/boost/asio 简单的HTTP POST请求 客户端模型

    作为一个呼应,写一个c++版本的同步http post客户端功能,如果你需要纯C版本,移步这里 linux下纯C简单的HTTP POST请求 客户端模型 讲解一下基本的的http post协议 通过\ ...

  4. January 21 2017 Week 3 Saturday

    Courage is grace under pressure. 勇气就是压力下的优雅. In the face of stress, can you deal with your task smoo ...

  5. SAP CRM One order里user status和system status的mapping逻辑

    Below example show: How the mapping relationship between User status and System status maintained in ...

  6. API代理网关和OAuth2.0授权认证框架

    API代理网关和OAuth2.0授权认证框架 https://www.cnblogs.com/bluedoctor/p/8967951.html 1,授权认证与微服务架构 1.1,由不同团队合作引发的 ...

  7. Vue组件绑定自定义事件

    Vue组件使用v-on绑定自定义事件: 可以分为3步理解: 1.在组件模板中按照正常事件机制绑定事件: template: '<button v-on:click="increment ...

  8. 树莓派(Raspberry Pi)上手小记

    引言 本日志中有不少软广告,博主并没有收他们任何好处,完全是给想入手的小伙伴们指条路而已.不喜勿看,不喜勿闻,不喜勿喷. 介绍 之前两三个月突然听说了这么个东西,也没有留意,某天突然在一个微信公众号上 ...

  9. 牛客网多校训练第一场 J - Different Integers(树状数组 + 问题转换)

    链接: https://www.nowcoder.com/acm/contest/139/J 题意: 给出n个整数的序列a(1≤ai≤n)和q个询问(1≤n,q≤1e5),每个询问包含两个整数L和R( ...

  10. yii2.0 在save保存之前的操作(放在模型model文件内)

    public function beforeSave($insert){ if(parent::beforeSave($insert)) { if($insert) { } else { } retu ...