随笔分类 - 博客 深入理解Java虚拟机 笔记
摘要:引言 对于Java中的垃圾回收机制,我们需要了解几个方面,本文也是从这几个方面通过回答这些问题而弄明白Java中的垃圾是如何回收的 首先我们要知道哪些内存需要回收,这一部分涉及到的算法有引用计数算法,根搜算法,但引用计数算法无法解决对象之间相互循环引用的问题。 知道了哪些内存需要回收之后,我们还需要知道什么时候回收这些垃圾内存,这就涉及到分代收集算法,而分代回收算法是以几个...
阅读全文
摘要:引言 这一章讲的是Java虚拟机的内存区域可以分为几个部分,书中讲到可以分为五个部分:分别是堆、栈、程序计数器、方法区、本地方法栈 其中堆里存放了对象的实例 而常说的基本数据类型,以及对象的引用就是存放在栈中的,其实更确切的说是存放在虚拟机栈的局部变量表中,虚拟机栈除了局部变量表之外,还担任了描述的是Java方法执行过程内存模型的职责; 每个方法被执行时都会在虚拟机栈...
阅读全文
摘要:当一个变量定义成volatile之后,它将具备两种特性: 1、第一是保证此变量对所有线程的可见性,这里的"可见性"是指当一条线程修改了这个变量的值,新值对于其它线程是可以立即得知的,变量值在线程间传递均需要通过主内存来完成,如:线程A修改一个普通变量的值,然后向主内存进行回写,另外一条线程B在线程A...
阅读全文
摘要:主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量值这样的底层细节。 此处的变量(Variable)与Java编译中所说的变量略有区别,它包括了实例字段,静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,自然就不存在竞争的问题。 为了获得比较...
阅读全文
摘要:站在虚拟机的角度上,只存在两种不同的类加载器: 一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机自身的一部分; 另外一种就是其它所有的类加载器,这些类加载器都由Java语言实现,独立于虚拟机外部,并且全部继承自java.lang.ClassLoader。 从Java开发人员...
阅读全文
摘要:几条主要的最普遍的内存分配规则: 1.对象优先在Eden分配 大多数情况下,对象在新生代的Eden区中分配。 当Eden区没有足够的空间进行分配时,虚拟将发起一次Minor GC,如果GC后新生代中存活的对象无法全部放入Survivor空间,则需要通过分配担保机制提前进入到老年代中,前提是老年代中不能容纳所有存活对象,即只能容纳部分。 ...
阅读全文

浙公网安备 33010602011771号