HTML 介绍
HTML
Oracle安装
安装oracle数据库
jdbc开发
jdbc开发
jdbc开发
JavaEE
mysql的使用
mysql的使用
mysql的安装
mysql的安装
Java8的Stream和Optional
Java 8引入了全新的Stream API。
Jdk常见新特性
JDK版本的特性介绍
Hash和HashCode
Hash的作用介绍Hash的定义
散列(哈希)函数
把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值,是一种压缩映射。
或者说一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
Hash函数特性
h(k1)≠h(k2)则k1≠k2,即散列值不相同,则输入值即预映射不同
如果k1≠k2,h(k1)=h(k2) 则发生碰撞;
如果h(k1)=h(k2),k1不一定等于k2;
Hash的使用场景
比如说我们下载一个文件,文件的下载过程中会经过很多网络服务器、路由器的中转,如何保证这个文件就是我们所需要的呢?我们不可能去一一检测这个文件的每个字节,也不能简单地利用文件名、文件大小这些极容易伪装的信息,这时候,就需要一种指纹一样的标志来检查文件的可靠性,这种指纹就是我们现在所用的Hash算法(也叫散列算法)。
散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你 ...
Java虚拟机
Java内存分配机制JVM内存管理
Java采用GC进行内存管理
Android虚拟机的垃圾回收采用的是根搜索算法。GC会从根节点(GC Roots)开始对heap(堆)进行遍历。到最后,部分没有直接或者间接引用到GC Roots的就是需要回收的垃圾,会被GC回收掉。而内存泄漏出现的原因就是存在了无效的引用,导致本来需要被GC的对象没有被回收掉。
理解内存分配
Java虚拟机是先一次性分配一块较大的空间,然后每次new时都在该空间上进行分配和释放,减少了系统调用的次数,节省了一定的开销,这有点类似于内存池的概念;二是有了这块空间过后,如何进行分配和回收就跟GC机制有关了。
java一般内存申请有两种:静态内存和动态内存 。很容易理解,编译时就能够确定的内存就是静态内存,即内存是固定的,系统一次性分配,比如int类型变量;动态内存分配就是在程序执行时才知道要分配的存储空间大小,比如java对象的内存空间。
深入的JVM内存管理知识,推荐《深入理解Java虚拟机》。
JVM内存分配的几种策略。静态的
静态的存储区,内存在程序编译的时候就已经分配好了,这块内存在程序整个 ...