文章分类 -  Java虚拟机

摘要:加载 在加载阶段,虚拟机需要完成以下三件事情: 1、通过⼀个类的全限定名来获取定义此类的⼆进制字节流; 2、 将这个字节流所代表的静态存储结构转化为⽅法区的运⾏时数据结构; 3、在内存中⽣成⼀个代表这个类的 java.lang.Class 对象,作为⽅法区这个类的各种数据的访问接⼝。 验证 主要是为 阅读全文
posted @ 2021-08-11 22:16 RainsX 阅读(67) 评论(0) 推荐(0)
摘要:应⽤程序⼀般是由上诉的三种类加载器相互配合进⾏加载的,如果有必要,还可以加⼊⾃⼰定义的类加载器,它们 的关系如下图所示: 双亲委派模型的⼯作过程: 如果⼀个类加载器收到了类加载请求,它⾸先不会⾃⼰去尝试加载这个类,⽽是把这个请求委派给⽗类加载器去完 成。每⼀个层次的类加载器都是如此,因此所有的加载请 阅读全文
posted @ 2021-08-11 15:46 RainsX 阅读(133) 评论(0) 推荐(0)
摘要:启动类加载器(Bootstrap ClassLoader):这个类加载器是由 C++ 语⾔实现的,是虚拟机⾃身的⼀部分。负责 将存在 <JAVA_HOME>\lib ⽬录中的,或者被 -Xbootclasspath 参数所指定的路径中的类库加载到虚拟机内存 中。启动内加载器⽆法被 Java 程序直接 阅读全文
posted @ 2021-08-11 15:44 RainsX 阅读(310) 评论(0) 推荐(0)
摘要:1、年轻代(Young Generation)的回收算法(主要以 Copying 为主) 1. 所有新⽣成的对象⾸先都是放在年轻代的。年轻代的⽬标就是尽可能快速的收集掉那些⽣命周期短的对象。 2. 新⽣代内存按照 8:1:1 的⽐例分为⼀个 eden 区和两个 survivor(survivor0、 阅读全文
posted @ 2021-08-11 09:39 RainsX 阅读(604) 评论(0) 推荐(0)
摘要:分代的垃圾回收策略,是基于这样⼀个事实:不同的对象的⽣命周期是不⼀样的。因此,不同⽣命周期的对象可以 采取不同的收集⽅式,以便提⾼回收效率。 在 Java 程序运⾏的过程中,会产⽣⼤量的对象,其中有些对象是与业务信息相关,⽐如 Http 请求中的 Session 对象、线程、Socket 连接,这类 阅读全文
posted @ 2021-08-11 09:34 RainsX 阅读(279) 评论(0) 推荐(0)
摘要:1. 标记清除算法(Mark-Sweep) 标记-清除算法采⽤从根集合(GC Roots)进⾏扫描,对存活的对象进⾏标记,标记完毕后,再扫描整个空间中未 被标记的对象,进⾏回收。标记-清除算法不需要进⾏对象的移动,只需对不存活的对象进⾏处理,在存活对象⽐ 较多的情况下极为⾼效,但由于标记-清除算法直 阅读全文
posted @ 2021-08-10 14:16 RainsX 阅读(69) 评论(0) 推荐(0)
摘要:Tip:这道题是⾮常重要的题⽬,⼏乎问到 Java 虚拟机这块都是会被问到的。建议不要简单的只回答⼏个区域的名 称,最好展开的讲解下,下⾯的答案是⽐较详细的,根据⾃⼰的理解回答其中某⼀段即可 1. 程序计数器 程序计数器(Program Counter Register):是⼀块较⼩的内存空间,它可 阅读全文
posted @ 2021-08-10 11:46 RainsX 阅读(119) 评论(0) 推荐(0)
摘要:1). 类加载器(ClassLoader) 2). 运⾏时数据区(Runtime Data Area) 3). 执⾏引擎(Execution Engine) 4). 本地库接⼝(Native Interface) 各组件的作⽤:⾸先通过类加载器(ClassLoader)会把 Java 代码转换成字节 阅读全文
posted @ 2021-08-09 21:21 RainsX 阅读(89) 评论(0) 推荐(0)