![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java虚拟机
smile2coder
记录学习路上的所见所识
展开
-
对象已死吗
读《深入理解Java虚拟机》 当虚拟机中需要发生GC时,垃圾收集器怎样判断对象是否已死? 1. 引用计数法 给对象添加一个引用计数器,当有一个地方引用它时,引用计数器就加1。当引用失效时,计数器就减1。 引用计数法实现简单,但是主流的java虚拟机里面没有选用引用计数法来管理内存,主要原因是它无法解决对象之间相互引用的问题。 2. 可达性分析法 通过一系列的“GC Roots”的对象作为起始点,从...原创 2019-01-18 16:44:56 · 207 阅读 · 0 评论 -
垃圾收集算法
读《深入理解Java虚拟机》 1. 标记-清除算法 算法分为标记和清除两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 优点:实现简单 缺点:效率低,标记和清除的效率都不高;产生大量内存碎片。 2. 复制算法 为了解决效率问题,复制算法出现了。它将可用内存容量划分为大小相等的两块,每次只使用其中的一块。当这一块内存用完了,就将还存活的对象复制到另外一块上面,然后将垃圾...原创 2019-01-18 19:04:57 · 104 阅读 · 0 评论 -
Java内存区域
最近在读《深入理解java虚拟机》第二版,在这边记录一下所见所感 本书以JDK1.7为例 Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。 对于Java来说,在虚拟机自动内存管理机制的帮助下,不需要再关心内存的分配和释放,也不容易出现内存泄漏和内存溢出。那我们为什么还要学习虚拟机呢? 首先我们要了解,不容易出现,并不是不可能出现。一旦...原创 2019-01-15 01:09:12 · 84 阅读 · 0 评论 -
内存分配与回收策略
读《深入理解Java虚拟机》 对象的内存分配,往大方向上讲,就是在堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配,少数情况下也可能会直接分配在老年代,分配的规则不是百分百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中的内存相关的参数的设置。 本文是使用Serial/Serial Old收集器的内存分配和回收的策略。 Min...原创 2019-01-22 01:13:19 · 105 阅读 · 0 评论 -
对象的创建
读《深入理解Java虚拟机》 Java是一门面向对象的编程语言,在Java程序运行过程中每时每刻都有对象被创建出来。在语言层面上,创建对象只是一个new关键字,在虚拟机中,对象(普通的java对象,不包括数组和Class对象)的创建是怎样的?这里简单的概述一下。 1. 加载 当虚拟机遇到一条new指令时,首先去建仓这个指令的参数是否能在常量池中定位到一个类的引用,并检查这个符合的引用的类是否已被加...原创 2019-01-17 00:47:30 · 146 阅读 · 0 评论 -
对象的内存布局
读《深入理解Java虚拟机》 对象在内存中分为3块区域:对象头,实例数据,对齐填充。 1.对象头 对象头包括两部分,第一部分用于存储对象自身的运行时数据,如哈希值,GC分代年龄,锁状态标志等;第二部分是指针类型,对象通过这个指针来确定这个对象是哪个类的实例。如果对象是一个Java数组,那在对象头中还必须有一块记录数组长度的数据。 2. 实例数据 实例数据是存放对象真正的有效数据。无论是从父类继承,...原创 2019-01-17 01:00:10 · 129 阅读 · 0 评论 -
对象的访问定位
读《深入理解Java虚拟机》 栈中的引用类型如何定位到堆中的具体对象呢?这边有两种方式: 1. 直接指针 引用类型中存储的就是对象,对象中存放了类型数据的地址 优点:只需要一次定位,速度快 2. 句柄访问 堆中划分出来一块内存作为句柄池,引用类型中存储的就是对象的句柄地址。句柄中包含了对象的实例数据和类型数据各自的具体地址信息 优点:引用类型中存放的是稳定的句柄地址,在对象被移动,只会改变句柄中的...原创 2019-01-17 01:10:49 · 146 阅读 · 0 评论 -
Java虚拟机加载总结
个人站点,请多关注 https://kooper.top/2019/05/16/java虚拟机加载总结/ 知识点总结,持续更新 当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类 类的生命周期包括:加载->验证->准备->解析->初始化->使用->卸载 类的加载阶段(双亲委派机制) 通过一个类的全...原创 2019-05-17 18:51:19 · 86 阅读 · 0 评论