1.Java类加载器
按加载的顺序分为
A 引导类加载器 Boostrap Classloader
加载jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类
B 扩展类加载器 Extension Classloader
加载jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
C 系统加载器 System(App) Classloader
加载classpath中指定的jar包及目录中class
D 自定义加载器 Customer Classloader
应用程序根据自身需要自定义的ClassLoader,如tomcat会根据j2ee规范自行实现ClassLoader
2.Java垃圾回收方式
两个最基本的Java回收算法:复制算法&标记清理算法
Java实行分代回收(新生代和年老代:新生代基本采用复制算法,老年代采用标记整理算法)
A 复制算法
两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法
B 标记清理算法
一块区域,标记要回收的对象,然后回收,出现碎片,进行碎片整理,整理出更大的内存放更大的对象
1.Serial New/Serial Old
Serial/Serial Old收集器是最基本最古老的收集器,它是一个单线程收集器,并且在它进行垃圾收集时,必须暂停所有用户线程。Serial New收集器是针对新生代的收集器,采用的是Copying算法,Serial Old收集器是针对老年代的收集器,采用的是Mark-Compact算法。它的优点是实现简单高效,但是缺点是会给用户带来停顿。
2.Parallel New
Parallel New收集器是Serial收集器的多线程版本(参照Serial New),使用多个线程进行垃圾收集。
3.Parallel Scavenge
Parallel Scavenge收集器是一个新生代的多线程收集器(并行收集器),它在回收期间不需要暂停其他用户线程,其采用的是Copying算法,该收集器与前两个收集器有所不同,它主要是为了达到一个可控的吞吐量。
4.Parallel Old
Parallel Old是Parallel Scavenge收集器的老年代版本(并行收集器),使用多线程和Mark-Compact算法。
5.CMS
CMS(Current Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,它是一种并发收集器,采用的是Mark-Sweep算法。
6.G1
G1收集器是当今收集器技术发展最前沿的成果,它是一款面向服务端应用的收集器,它能充分利用多CPU、多核环境。因此它是一款并行与并发收集器,并且它能建立可预测的停顿时间模型。
参考URL:
https://www.nowcoder.com/questionTerminal/795b066b67c84478aec4dc400b3d0153
分享到:
相关推荐
由于Java的垃圾收集机制不直接回收类加载器,除非整个ClassLoader实例没有被任何对象引用,否则不会被GC。这导致了类加载器的泄漏问题,需要注意对类加载器的生命周期管理。 7. **类加载器的源码分析** 对于深入...
类加载器实例在不再有引用时会被垃圾回收,但其所加载的类不会因加载器的消失而消失,除非整个JVM退出。 7. **类加载器问题与调试** 遇到类冲突、类找不到等问题时,可通过设置JVM参数`-verbose:class`来查看类...
一旦某个类被加载到类加载器中,它会保持在缓存中一段时间,但是JVM的垃圾收集器可以回收这些Class对象。 在类加载器的层次结构中,还有一个重要的机制是双亲委托机制。这是一种代理模式,使得一个类加载器在加载类...
类加载器的生命周期是指从类加载器的创建到其被垃圾回收的整个过程。在 Java 中,类加载器的生命周期可以分为以下几个阶段: 1. 加载阶段:在这个阶段,类加载器会将类加载到内存中。 2. 链接阶段:在这个阶段,类...
此外,类的卸载在Java中相对复杂,通常只有在以下情况才会发生:类的加载器被垃圾收集器回收,且该类的所有实例都已被回收,同时系统中没有对该类的静态变量或静态方法的引用。 总结,Java 类加载器是JVM中的重要...
其工作原理是:当一个类加载器需要加载某个类时,首先将请求委派给其父加载器,如果父加载器可以加载该类,则由父加载器加载,否则继续委派给上一级加载器,直到找到可以加载该类的加载器。 在 Java 中,我们可以...
Java类加载器(ClassLoader)是Java虚拟机(JVM)中的一个重要组成部分,用于将Java类文件加载到JVM中,以便能够执行Java程序。在Java中,类加载器的设计采用了一种称为“双亲委派模式”(Parent Delegation Model)...
本教程将涵盖Java的基础知识,特别是关于内存管理的重要概念——Java内存区域、Out of Memory (OOM)错误以及垃圾回收器和垃圾回收策略。 1. **Java入门**: Java的学习始于基础语法,包括变量、数据类型、运算符、...
"Java面试题-内存+GC+类加载器+JVM调优" 在 Java 面试中,内存、GC、类加载器和 JVM 调优是非常重要的知识点,本文将对这些知识点进行详细的解释和分析。 一、Java 内存模型 在 Java 中,内存主要分为两部分:堆...
当一个类加载器不再使用时,如果没有其他引用指向它,理论上应该被垃圾回收。但是,如果这个类加载器加载的类还在使用,那么类加载器就无法被回收,这可能会导致资源浪费。因此,设计良好的类加载器应该遵循最小权限...
- **扩展类加载器(Extension ClassLoader)**:该类加载器负责加载`<JAVA_HOME>/lib/ext`目录下的类库,或者被`java.ext.dirs`系统变量所指定的路径中的所有类库。 - **应用类加载器(Application ClassLoader)**:也...
Java 类加载过程是Java虚拟机...理解Java类加载过程有助于优化程序性能,如通过自定义类加载器实现热部署,或者通过控制初始化时机来避免不必要的资源消耗。同时,这也对理解JVM内存模型和异常处理机制有着重要的作用。
Java中类的卸载并不常见,因为只有当类加载器被垃圾回收,且该类加载器加载的所有类都没有被引用时,JVM才会卸载这些类。这使得类的卸载变得困难,但在特定场景下,如内存管理严格的系统,仍需要考虑类的卸载问题。...
尽管Java提供了垃圾回收机制,但类加载器并不会自动卸载类。只有当类加载器被卸载,且该类及其所有子类没有被任何强引用所引用时,类才可能被卸载。 9. **类加载的最佳实践**: - 适当使用类加载器,避免类加载器...
总的来说,Java的垃圾回收机制和运行过程涉及到内存管理、类加载和安全策略等多个方面。理解这些概念对于编写高效、安全的Java程序至关重要。开发者应当关注如何有效地管理内存,避免内存泄漏,同时也要理解Java平台...
2. 类加载机制解释了类的加载、链接和初始化过程,包括双亲委派模型和自定义类加载器的实现。 3. 垃圾回收算法介绍了标记清除、复制、标记整理等垃圾回收算法,并详细分析了CMS和G1垃圾收集器的工作原理。 4. JVM...
Java的安全性体现在多个方面,包括类加载器的分层加载机制,它可以防止网络上的恶意类覆盖本地系统类;字节码验证确保代码安全执行;以及运行时的内存管理,通过限制对内存的直接访问来防止内存破坏。 总结一下,...
类加载器是JVM的一个组成部分,负责加载Java类到内存中。加载过程包括五个步骤: 1. **加载**:从磁盘读取字节码文件(`.class`)到内存。 2. **验证**:确保字节码文件符合Java语法规则和安全限制。 3. **准备**:...
本篇文章将详细讲解"JVM调优总结(4)分代垃圾回收"这一主题,旨在帮助Java开发者掌握更加高效、稳定的应用运行策略。 一、分代垃圾回收理论基础 Java的内存管理主要依靠垃圾回收机制,它自动回收不再使用的对象,...