摘要:
对象优先在新生代的 eden 区分配内存,但是也并不绝对,下面几种情况对象会晋升到老年代 大对象直接进入老年代。比如很长的字符串,或者很大的数组等。 长期存活的对象进入老年代。在堆中分配内存的对象,其内存布局的对象头中(Header)包含了 GC 分代年龄标记信息。如果对象在 eden 区出生,那么 阅读全文
摘要:
Minor GC 也被称为新生代 GC,指发生在新生代(PSYoungGen)的垃圾收集动作,新生代包括三块内存区域 eden 区,from (From Survivor)区 与 to(To Survivor) 区。对象优先在 eden 创建并区分配内存,当 eden 区内存无法为一个新对象分配内存 阅读全文
摘要:
强引用就是在程序代码中普遍存在的,类似Object obj=new Object()这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。 软引用是用来描述一些还有用但并非必须的元素。对于它在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二回收,如果这次回收还没有足 阅读全文
摘要:
(1)应用计数法 (2)可达性分析法 阅读全文
摘要:
类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。其中,类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。 阅读全文
摘要:
1、标记-清除法 2、复制算法 4、标记-整理法 5、分代收集算法 阅读全文
摘要:
JVM内存分为哪几部分,这些部分分别都存储哪些数据? 线程隔离的数据区:程序计数器、Java虚拟机栈、本地方法栈。 由所有线程共享的数据区:Java堆、方法区。 程序计数器 可以看作当前线程所执行的字节码的行号指示器。 Java虚拟机栈 Java虚拟栈描述的是Java方法执行的内存模型:每个方法在执 阅读全文
摘要:
Java 中的 volatile 关键字有两个主要的作用,一个是保证内存的可见性,还有一个作用就是禁止指令重排序的发生。 上面我们已经简答的提到了 volatile 关键字的作用,一个是保证内存的可见性,还有防止指令重排序。 下面再来解释一下内存可见性 内存可见性:当一条线程修改了某个值,这个新值对 阅读全文
摘要:
栈溢出: 堆内存溢出: 阅读全文
摘要:
一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法(如果覆盖了finalize()方法),并且在下一次垃圾回收器发生时,才会真正回收对象占用的内存。 至于为什么在下一次垃圾回收动作发生时才会回收内存,原因是如果一个对象覆盖了 finalize() 方法,那么在真正被宣告 阅读全文
摘要:
不会,在下一个垃圾回调周期中,这个对象将是被可回收的。 也就是说并不会立即被垃圾收集器立刻回收,而是在下一次垃圾回收时才会释放其占用的内存。 阅读全文
摘要:
类加载器的双亲委托模型并不是一个强制的约束模型,而是 Java 设计者推荐给开发者的一种加载器方式。上面类加载器的父子关系一般不会以继承的方式实现,而是采用组合的关系来复用父类加载器的代码。 工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完 阅读全文