摘要: 类完整的生命周期包括加载,验证,准备,解析,初始化,使用,卸载,七个阶段.其中验证,准备,解析统称为连接,类的卸载在前面的关于垃圾回收的博文中已经介绍. 加载,验证,准备,初始化,卸载这五个阶段的顺序是确定的,类的加载必须按照这种顺序按部就班的来,而解析阶段不一定,它可以在初始化阶段之后开始,这是为 阅读全文
posted @ 2018-03-16 17:28 随花四散 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 1.基本内存分批策略 大多数情况在新生代Eden区分配,如果启动了本地线程分配缓冲,将按线程优先在TLAB(线程私有缓冲区)上分配.当Eden区域没有足够的空间时将发起一次Minor GC. 值得注意的是,如果一个对象过大(例如分配了一个大的byte[]数组),该对象将直接进入老年代..因为对象过大 阅读全文
posted @ 2018-03-16 15:32 随花四散 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 1.垃圾收集算法 1) 标记-清楚算法:该算法是最基础的收集算法,其分为标记与清除两个阶段.首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,该算法主要有两个不足:一个是效率问题,标记与清除都是两个效率不高的过程;另一个空间问题,标记清除会产生大量不连续的内存空间,碎片空间过多会导 阅读全文
posted @ 2018-03-16 14:57 随花四散 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 1.对象的创建 1) 当虚拟机遇到一条new的指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载,解析和初始化过. 2) 在类加载检查通过后,接下来的虚拟机将为新生对象分配内存. 3) 内存分配完成后,虚拟机需要将分配到的空间内存初始化 阅读全文
posted @ 2018-03-16 13:47 随花四散 阅读(382) 评论(0) 推荐(1) 编辑
摘要: java运行时内存区域划分为方法区,堆区,虚拟机栈区,本地方法栈,程序计数器.其中方法区跟堆区是线程共享的数据区,其他的是线程私有的数据区. 1.程序计数器 程序计数器(PC)是一块较小的内存,他是存储当前线程执行的字节码的行号指示器,可以类比硬件中PC,硬件中的PC用于指示当前程序执行的代码在内存 阅读全文
posted @ 2018-03-16 12:04 随花四散 阅读(342) 评论(0) 推荐(0) 编辑