深入理解JVM 上

什么是JVM​ JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。​ 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。(引用百度百科)SunJDK和OpenJDK内置的是 HotSpot JVM,是目前使用范围最广的Java虚拟机。当然还有很多虚拟机也非常优秀比如 KVM、Squawk VM、IBM J9 VM等。JVM内存布局与分配程序计数器​ 程序诈数器(Program Counter Register) 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。虚拟机栈​ 与程序计数器一样,Java ...

阅读jdk1.7的HashMap源码

首先一开头作者们已经注释了HashMap多线程执行是不安全的是不同步的,如果非要用线程去操作HashMap而且确保同步需要线程加锁或者Map m = Collections.synchronizedMap(new HashMap(...));HashMap底层是数组+链表,实例化不并不会马上去初始化数组,而是有添加数据时才会初始化为2次幂大小容量的数组。详见PUT函数的代码public static int highestOneBit(int i) { // HD, Figure 3-1 i |= (i >> 1); i |= (i >> 2); i |= (i >> 4); i |= (i >> 8); i |= (i >> 16); return i - (i >>> 1); }Integer.highestOneBit 用于找一个接近n又小于等于n的二次幂数字 原理很简单,把二进制的低位都填充1 然后用高位减去低位即可获得2次幂的数。...

基于SpringBoot的个人项目【完结】

Error0 Blog Java版花费我许多时间总算完成了,第一次个人从头到尾写完一个项目。简介主要技术: SpringBoot 、Mybatis、 Bootstrap。页面展示PCphone

Java多线程基础

进程与线程进程:是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。每个程序都是一个进程,一个进程里面可以包含多个线程。(比如你在听歌的时候是一个线程,下载音乐又是另一个线程,它们不会互相干扰),线程之间可以共享进程的资源。Java多线程Java虚拟机允许应用程序同时执行多个执行线程。1、继承ThreadThread常用的方法Modifier and TypeMethodDescriptionvoidstart()导致此线程开始执行; Java虚拟机调用此线程的run方法。static voidsleep(long millis)使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。 会占用线程的睡眠voidjoin()等待这个线程死亡。static voidyield()对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。voidrun()如果这个线程使用单独的Runnable运行对...