
《深入理解Java虚拟机》学习笔记
captxb
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
chapter07_虚拟机类加载机制_4_类加载器
类加载器 (1) 作用:通过一个类的全限定名获取类的二进制字节流 (2) 类的唯一性由__类加载器__和__类__本身 一起保证 即便采用了单例模式,如果类加载器不同,加载出的两个类的对象也不同 类加载器的分类 (1) 分类一 1° 启动类加载器 用C++编写,是JVM的一部分,负责将/lib中的类库加载到虚拟机内存中,无法被Java程序直接引用 2° 其他类加载器 用java编写 (2)...原创 2019-03-08 18:01:06 · 127 阅读 · 0 评论 -
chapter03_垃圾收集器与内存分配策略_6_内存分配与回收策略
对象优先在新生代的Eden区(8的那个)分配 当Eden区没有足够空间时,会进行一次Minor GC (1) Minor GC 发生在新生代的GC,比较频繁,回收速度也比较快 (2) Full GC 发生在新生代和老年代的GC,回收频率低,回收一次比较慢(Minor GC的10倍以上) 大对象直接进入老年代 否则,它们如果进入新生代,使用了复制算法的时候,复制大对象一次的消耗太大 ...原创 2019-03-06 21:02:35 · 113 阅读 · 0 评论 -
chapter03_垃圾收集器与内存分配策略_3_垃圾收集算法
标记——清除算法 (1) 最__基础__的GC算法 (2) 过程 先把需要回收的对象标记上,然后统一回收所有被标记的对象 (3) 问题 1° 标记过程和清除过程的__效率都不高__ 2° 标记、清除之后会产生大量__内存碎片__,造成分配大对象是找不到空间,可能又会频繁诱发GC 复制算法 (1) 基础版本 将内存__等分__成两块,每次对象分配都__只用其中一块__,GC时把用的那块内存中...原创 2019-03-06 20:53:19 · 177 阅读 · 0 评论 -
chapter03_垃圾收集器与内存分配策略_2_对象已死吗
引用计数算法 (1) 思想 给每个对象添加一个引用计数器,每次有引用到这个对象的地方,引用计数器就+1;引用失效就-1; GC时回收那些引用计数器为0的对象 (2) 问题:互相引用 class A { B b; } class B { A a; } class Test { public static void main(Strin...原创 2019-03-06 19:41:00 · 138 阅读 · 0 评论 -
chapter03_垃圾收集器与内存分配策略_1_概述
(1) 虚拟机栈、本地方法栈、程序计数器不是内存分配与回收需要关心的,因为它们的大小基本上编译期间就能确定; (2) __堆__和__方法区__是内存分配和回收需要关心的,因为一个接口有多个实现类,一个方法可能进入不同分支,这些都是运行期才知道的 ...原创 2019-03-06 19:21:10 · 105 阅读 · 0 评论 -
chapter02_Java内存区域与内存溢出异常_3_内存溢出的异常
Java堆溢出 (1) 不断创建新对象 虚拟机栈和本地方法栈溢出 (1) 单线程下,无递归终止条件 (2) 不断开辟新线程,每个线程都会被分配自己的栈,最终溢出 方法区(包括运行时常量池)溢出 (1) 运行时常量池溢出的一种情况: 运行时常量池中存放了大量的字符串 (2) 方法区溢出的一种情况 运行时产生大量的类(方法区会保存各个被加载的类的信息) Java中的内存泄漏 (1) 内...原创 2019-03-06 19:16:43 · 113 阅读 · 0 评论 -
chapter02_Java内存区域与内存溢出异常_2_HotSpot虚拟机中的对象
对象的创建 (1) 仅讨论new一个普通的Java对象的过程 1° JVM会检查方法区的运行时常量池中是否有这个类的符号引用,以及这个类是否已经被加载、解析和初始化过。如果没有,则进行类的加载过程(chapter07) 2° 在Java堆中为新生的对象分配内存(在类加载的过程中,对象所需的内存即可确定) 3° 将分配到的内存空间都初始化为零值(类加载的结果是:类的静态变量在准备过程赋零值,然后...原创 2019-03-06 19:15:45 · 128 阅读 · 0 评论 -
chapter02_Java内存区域与内存溢出异常_1_运行时数据区域
运行时数据区包括__5个__大的部分: 1° Java堆 2° 方法区 3° 程序计数器 4° 虚拟机栈 5° 本地方法栈 其中,前2个区域(堆、方法区)多线程共享,后3个区域线程私有(意味着每个线程都有独立的一个区域) 程序计数器 (1) 作用 记录下一条需要执行的字节码指令 (2) 每个线程都有一个独立的程序计数器, 它们互不影响 (3) 如果当前线程执行的是一个Java方法,则程序计...原创 2019-03-06 19:12:50 · 116 阅读 · 0 评论 -
chapter07_虚拟机类加载机制_3_类加载的过程
一个类从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括__7个__阶段 (1) 加载 (2) 验证 (3) 准备 (4) 解析 (5) 初始化 (6) 使用 (7) 卸载 其中,连接包括了 2,3,4 三个步骤, 所以也可以写作 加载 --> 连接 --> 初始化 – > 使用 --> 卸载 第一步:加载 (1) 加载阶段要完成__3个__任务 1° ...原创 2019-03-08 18:07:11 · 130 阅读 · 0 评论 -
chapter07_虚拟机类加载机制_3_类加载的过程
一个类从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括__7个__阶段 (1) 加载 (2) 验证 (3) 准备 (4) 解析 (5) 初始化 (6) 使用 (7) 卸载 其中,连接包括了 2,3,4 三个步骤, 所以也可以写作 加载 --> 连接 --> 初始化 – > 使用 --> 卸载 1,2,3,5,7 一定是按部就班的进行,解析阶段有可能是初...原创 2019-03-08 18:04:56 · 88 阅读 · 0 评论 -
chapter07_虚拟机类加载机制_1_概述
本章所讲的都是类加载的过程,和对象实例加载的过程不是一回事 Java中编译时__不需要静态连接__(也就是说全是动态的),类型的加载、连接、初始化都是在程序运行期间完成的。 所以,class文件既可以从磁盘上获得,也可以运行时从网络或其他地方获得 ...原创 2019-03-08 18:02:41 · 97 阅读 · 0 评论 -
chapter03_垃圾收集器与内存分配策略_5_垃圾收集器
垃圾收集器 (1) 用于回收__新生代__: Serial:可以搭配CMS、Serial Old(MSC)使用 ParNew:可以搭配CMS、Serial Old(MSC)使用 Parallel Scavenge:可以搭配Parallel Old、Serial Old(MSC)使用 (2) 用于回收__老年代__ CMS(Concurrent Mark Sweep):可搭配Serial、Par...原创 2019-04-05 12:35:36 · 145 阅读 · 0 评论