随笔分类 - 深入理解Java虚拟机
摘要:并发编程三大特性 原子性 一个操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行。 对于基本数据类型的访问,读写都是原子性的【long和double可能例外】。 如果需要更大范围的原子性保证,可以使用synchronized关键字满足。
阅读全文
摘要:类加载器 Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”(Class Loader)。 对于任意一个类,都必须由加载它的类加载器和这个类
阅读全文
摘要:类加载机制:Java虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。 类加载的时机 加载阶段合适开始,《Java虚拟机规范》并没有强制约束,交由虚拟机自己实现。 而初始化阶段,严格规定有且只有以下六种情况,如果类型没有进
阅读全文
摘要:强引用 在 Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到 JVM 也不会回收。因此强引用是造成 Java 内存泄漏的主要原因之一。 软引用 软引用需
阅读全文
摘要:参考于:JavaGuide JVM内存区域 JDK1.8前后,JVM内存区域的变化 一、JDK1.8前 二、JDK1.8之后 线程共享 一、堆 Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象
阅读全文