JVM培训序幕篇
明天老王要给我们讲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培训序幕篇的更多相关文章
- JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇
JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇 作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题).我们也知道我们Java程序 ...
- JVM培训之一些GC算法的理论知识
很精彩的一次内部分享,介绍了大部分的GC算法理论知识,JVM博大精深,本篇文章只是结合本次内部分享总结的一些理论知识,如果有大佬有疑问,欢迎留言指出! Concurrent:并发,程序一边运行一边做G ...
- 初步了解JVM第三篇(堆和GC回收算法)
在<初步了解JVM第一篇>和<初步了解JVM第二篇>中,分别介绍了: 类加载器:负责加载*.class文件,将字节码内容加载到内存中.其中类加载器的类型有如下:执行引擎:负责解 ...
- 总结《深入理解JVM》 G1 篇
注:一下内容主要结合<深入理解JVM>3th总结而来. 接上一篇,我们来说说G1,G1作为现在的主要的JVM GC,被作为各大互联网主要使用的垃圾回收器,了解G1回回收原理和回收过程,才能 ...
- JVM 第六篇:极致优化 IDEA 启动速度
本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 引言 相信做 Java 开发的同学,对 IDEA 这个工具应该都不陌生,即使不使用 IDEA 做开发,那么对 Eclipse 这个工具应该 ...
- 【JVM第六篇--对象】对象的实例化、内存布局和访问定位
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.对象的实例化 在平常写代码的过程中,我们用class关键字定义的类只是一个类的模 ...
- 深入理解Java虚拟机之JVM内存布局篇
内存布局**** JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...
- JVM培训作业第二周
1. jre的运行时主要jar文件rt.jar都很大,这导致了用java做的桌面客户端程序很难发布绑定jre发布.这在很大程度上限制了java桌面软件 的分发.可是,jre并不是在所有的用户计算机上都 ...
- 【Java面试必备JVM】JVM看这篇就够了
链接–>JVM
随机推荐
- Python学习---网络文件上传
中心思想: 传递过去文件的大小,根据文件的大小判断是否文件上传完成: 传递/接受文件采用分流的形式,每次传递/接受部分数据: 文件的读取均采用绝对路径实现,而且是bytes的形式读写 客户端: # ...
- 上传附件(图片base64)封装方法
上传附件(图片base64)封装方法 php 上传附件,base64 项目中封装的接口: public function error($msg){ header("Content-type: ...
- TIAGO机器人传感器参数简介 手册翻译
本来认为这篇文章是最没人气的,竟然收到了回复,看来要继续更新本文了.留下笔者联系方式,邮箱leop22@163.com,欢迎邮件交流. 防止不良爬虫,原文链接:http://www.cnblogs.c ...
- MapReduce编程中常用的字符操作
本文主要用于记录自己在编写mapreduce程序时常用的一些方法,后期会不断更新,用于自己复习和给新手一些帮助. 字符串操作 String str = " 12345"; // 字 ...
- postgres if ,when及判断表是否存在的sql编写
判断表是否存在方法1: SELECT THEN END FROM ( select count(*) as cc from pg_class where relname = 'wo' --wo is ...
- 对HandlerExecutionChain类的理解分析
HandlerExecutionChain类比较简单,好理解. ==================================================================== ...
- anydesk重启脚本
1.restart.sh: #!/bin/sh sh /home/zhoushuo/anydeskTest/stop.sh echo 'zhoushuo'|sudo -S /usr/bin/anyde ...
- hbase hfilev2
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014393917/article/details/25508809 HFileV2文件 HFile ...
- 【[HAOI2009]逆序对数列】
发现自己学了几天splay已经傻了 其实还是一个比较裸的dp的,但是还是想了一小会,还sb的wa了几次 首先这道题的状态应该很好看出,我们用\(f[i][j]\)表示在前\(i\)个数中(即\(1-i ...
- 持续集成之Jenkins+Gitlab实现持续集成
项目使用git+jenkins实现持续集成 开始构建 General 源码管理 我们安装的是Git插件,还可以安装svn插件 我们将git路径存在这里还需要权限认证,否则会出现error 我们 ...