在上一篇博客深入理解JVM—垃圾回收器(GrabageCollector)基础篇我们了解了Java判定一个对象是否为垃圾的两种算法,以及3种垃圾回收算法。如果说收集算法室是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。接下来我们就一起来了解一下常见的垃圾收集器。1、垃圾收集器在G1垃圾出现之前,JVM是对堆内存进行分代管理的,分为新生代和老年代,按照这样的划分,不同分...
1、如何判断对象可以被回收1.1引用计数法 给对象添加一个引用计数器,每当有一个地方引用该对象的时候此计数器+1;当一个引用失效后计数器-1,当计数器的值减为0了的对象就不在可能被使用了。优点:实现简单,判定效率高。缺点:当对象之间的相互循环引用时,会导致GC失效,从而造成内存泄漏。1.2可达性分析算法以一系列“GCRoots”为起点,从这些对象开始向下搜索,当一个对象到GCRo...
1、堆(Heap)概述Java堆(JavaHeap)是JVM所管理的最大的一块内存空间。Java堆是被所有线程共享的一块内存区域,在JVM启动的时候创建,堆的唯一目的就是存放对象实例的,Java中几乎所有的对象实例和数组都在堆上分配内存,但是随着JIT编译器的发展与逃逸分析技术的成熟,桟上分配、标量替换等优化技术使得对象可以在桟帧中直接分配。Java堆的容量可以是固定大小的,也可以随着程序执...
一、对象的创建过程(1)判断类是否加载。检查常量池中是否可以定位到指定类的符号引用,并且检查这个符号引用所代表的类时候已经被加载、链接和初始化过。如果可以定位到符号引用,并且已经被加载过:进入第2步如果没法定位到符号引用或没有被加载过:执行相应的类加载过程。(2)分配内存。(指针碰撞:Serial、ParNew/空闲列表:CMS)。(3)初始化零值。为对象中的实例字段赋零值(不是给静态属性赋...
首先我们来看一道关于字符串的面试题,请大家先不要直接上机运行,自己先在脑子里运行一下这段程序,如果你可以很清晰的得到所有输出,那么恭喜你!这篇文章你就不要在浪费时间再看了;如果你在某一步还有不清楚的,那么这篇文章将会一网打尽所有你对String常量池的疑虑。运行结果:1、StringTable概述 StringTable又可以称为StringPool,字符串常量池,...