注意:本篇博客,主要参考自如下四本书html
《分布式Java应用:基础与实践》java
《深刻理解Java虚拟机(第二版)》程序员
《突破程序员基本功的16课》算法
《实战java虚拟机》数组
说明:关于JVM内存结构,查看《第一章 JVM内存结构》,下面所讲的JVM内存分配主要是指在Hotspot JVM下新建对象在堆内存中分配的状况。缓存
一、建立一个真正对象的基本过程并发
六步:分布式
注意:第三步和第四步可能发生指令重排序,这也是单例模式使用 volatile 修饰对象的缘由。ide
二、内存分配概念memcached
三、内存分配两种方式
四、内存分配并发问题
堆内存是各个线程的共享区域,因此在操做堆内存的时候,须要处理并发问题。处理的方式有两种:
五、总结
String s1 = "hello1"; String s2 = "hello2"; String s3 = "hello3"; String s4 = s1+s2+s3;
实际上,咱们只想要字符串s1+s2+s3,可是在上述的拼接过程当中,会造成s1+s2的临时字符串。拼接字符串,使用StringBuilder,该类相较于StringBuffer因为不是同步类,其运行效果会更好。
public void info(){ Object obj = new Object(); System.out.println(obj.hashCode()); obj = null;//显式释放无用对象 }
如上边方法所示,其中的obj是一个局部变量,在方法执行结束后,栈帧就会出栈并被回收,栈帧中所存储的局部变量一块儿被回收掉了,因此这里的"obj=null;"就没用了,可是看下边
public void info(){ Object obj = new Object(); System.out.println(obj.hashCode()); obj = null;//显式释放无用对象 //下边还有一些很耗时、很耗内存的操做,这些操做与obj无关 }
这时候,若是咱们加上了"obj=null;"这一句,那么就有可能在方法执行结束以前,obj被回收。