JAVA虚拟机
文章平均质量分 81
郭大侠写leetcode
这个作者很懒,什么都没留下…
展开
-
《深入理解JAVA虚拟机》学习笔记(一)JAVA内存划分
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《 Java虚拟机规范(Java SE 7版)》 的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。 java内存主要分为6部分,分别是程序计数器,虚拟机栈,本地方法栈,堆,方法区和直接内存。 我们以下面的代码为例讲解虚拟机是如何分配内存的。原创 2017-05-01 14:06:02 · 440 阅读 · 0 评论 -
《深入理解JAVA虚拟机》学习笔记(三)JAVA垃圾收集算法和常见垃圾收集器
一、垃圾收集算法 1、标记—清除算法 算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象 缺点:标记清除之后会产生大量不连续的内存碎片 2、复制算法 将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。 当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉原创 2017-05-01 16:27:01 · 258 阅读 · 0 评论 -
《深入理解JAVA虚拟机》学习笔记(二)JAVA垃圾收集之对象存活判定算法
上一篇介绍了Java内存运行时区域的各个部分,其中程序计数器、 虚拟机栈、 本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。 每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的。。 而Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才原创 2017-05-01 15:36:17 · 560 阅读 · 0 评论 -
《深入理解JAVA虚拟机》学习笔记(五)CLASS文件结构
虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序的“一次编写,到处运行”。各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构成平台无关性的基石,但本节标题中刻意省略了“平台”二字,那是因为笔者注意到虚拟机的另外一种中立特性——语言无关性正越来越被开发者所重视。 实现语言无关性的基础仍然是虚拟机和字节码存储格式。 Java虚拟机不和包括Java在内原创 2017-05-01 17:01:57 · 270 阅读 · 0 评论 -
《深入理解JAVA虚拟机》学习笔记(四)JAVA内存分配策略
对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。 少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置。 1、对象优先在Eden分配原创 2017-05-01 16:33:45 · 290 阅读 · 0 评论 -
《深入理解JAVA虚拟机》学习笔记(六)JAVA虚拟机类加载机制
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、 验证(Verification)、 准备(Preparation)、 解析(Resolution)、 初始化(Initialization)、 使用(Using)和卸载(Unloading)7个阶段。 其中验证、 准备、 解析3个部分统称为连接(Linking) 1、类加载的时机原创 2017-05-01 17:33:21 · 220 阅读 · 0 评论 -
《深入理解JAVA虚拟机》学习笔记(七)JAVA多态的实现:动态分派
JAVA动态分派 JAVA多态 invokevirtual指令原创 2017-05-01 17:57:57 · 413 阅读 · 0 评论 -
《深入理解JAVA虚拟机》学习笔记(八)JAVA内存模型与线程
一、Java内存模型 1、主存与工作内存 Java内存模型规定了所有的变量都存储在主内存。Java内存模型规定了所有的变量都存储在主内存都必须在工作内存中进行,而不能直接读写主内存中的变量。不同的线程之间也无法直接访问对方工作内存中的变量 。 2、内存间交互操作 Java内存模型中定义了以下8种操作来完成,虚拟机实现时必须保证下面提及的每原创 2017-05-05 08:47:11 · 446 阅读 · 0 评论 -
《深入理解JAVA虚拟机》学习笔记(九)JAVA线程安全与锁优化
一、线程安全 按照线程安全的“安全程度”由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以下5类:不可变、 绝对线程安全、 相对线程安全、 线程兼容和线程对立。 1、不可变 不可变的对象一定是线程安全的,无论是对象的方法实现还是方法的调用者,都不需要再采取任何的线程安全保障措施。 Java语言中,如果共享数据是一个基本数据类型,那么只要在定义时使用final关键字修饰原创 2017-05-05 10:07:54 · 359 阅读 · 0 评论