![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java虚拟机
黎九州
这个作者很懒,什么都没留下…
展开
-
6.3 什么是类加载器,类加载器有哪些?
即当一个类加载器收到加载请求时,它首先会将这个请求委派给父类加载器去处理,只有在父类加载器无法处理时,才由自己来加载类。这样可以避免同一个类被不同的类加载器加载多次,从而保证了类的唯一性。Java虚拟机可以同时使用多个类加载器,每个类加载器负责加载一些特定的类。:用来加载Java的核心类库,位于JRE的lib目录下,是虚拟机的一部分,是由C++实现的,不是Java类。:开发人员可以根据自己的需要编写自己的类加载器,来实现一些特定的需求,例如加载网络上的类文件等。原创 2023-04-10 21:22:17 · 208 阅读 · 0 评论 -
6.1简述java类加载机制?
Java类加载机制是指JVM在运行时将类的.class文件加载到内存中,并对其进行验证、准备、解析、初始化等一系列操作的过程。此外,JVM还提供了双亲委派模型来保证类加载的顺序和一致性,即先由父类加载器尝试加载类,如果无法加载再由子类加载器加载。需要注意的是,类的加载机制是延迟加载的,即在程序运行过程中,只有使用到某个类时,JVM才会将它加载到内存中。:执行类的初始化代码,包括静态变量赋值、静态块执行等。:将符号引用转换为直接引用,即将类、方法、字段等的引用转换为直接指向内存中的实际对象。原创 2023-04-10 20:30:41 · 77 阅读 · 0 评论 -
5.1 简述java内存分配与回收策率以及Minor GC和Major GC
对象首先会被分配在Eden区,当Eden区满时,会触发Minor GC,将存活的对象复制到Survivor区或老年代中,并清空Eden区和使用过的Survivor区。在这个过程中,可能会出现对象晋升的情况,即从新生代晋升到老年代。2 回收的速度不同:Minor GC通常比Major GC快,因为新生代中的对象通常比较少,而且使用的是复制算法,回收速度较快。3 对应用程序的影响不同:Minor GC通常只会短暂地停止应用程序的运行,而Major GC则可能会停止应用程序更长的时间,因为它涉及的对象较多。原创 2023-04-10 17:36:30 · 242 阅读 · 0 评论 -
4.13 简述分代垃圾回收器是怎么工作的?
当Eden区满时,触发一次Minor GC,将存活的对象复制到另一个Survivor区,同时清空Eden区和使用过的Survivor区。当某个Survivor区也满时,会将存活的对象复制到另一个空闲的Survivor区或者老年代,同时清空使用过的Survivor区。分代垃圾回收器的工作原理是通过将对象按照生命周期分配到不同的代中,针对不同代采用不同的垃圾回收策略,以提高垃圾回收效率和应用性能。标记-清除算法会先标记所有存活的对象,然后清除所有未标记的对象,但这可能会导致内存碎片化问题。原创 2023-04-10 17:31:31 · 252 阅读 · 0 评论 -
4.12 新生代垃圾回收器和老年代垃圾回收器都有哪些?有什么区别?
总的来说,新生代垃圾回收器主要是为了快速回收短时间存活的对象,而老年代垃圾回收器则主要是为了回收长时间存活的对象。,主要针对响应时间优先的应用,垃圾回收和应用程序并发执行,可以减少停顿时间,但可能会导致碎片化问题。,主要针对单CPU环境,采用标记-整理算法,垃圾回收时只有一个线程执行,容易造成较长的停顿时间。,采用复制算法,主要针对吞吐量优先的应用,多线程执行垃圾回收,但不能保证最短的停顿时间。,是最简单的垃圾回收器,采用复制算法,单线程执行,适用于小内存环境。原创 2023-04-10 16:15:08 · 555 阅读 · 0 评论 -
4.11 详细介绍一下 CMS 垃圾回收器?
不过,需要注意的是,由于 CMS 垃圾回收器可能会导致内存碎片的问题,因此对于需要长时间运行的应用程序,可能需要定期执行 Full GC(全局垃圾回收)以避免内存碎片问题影响性能。CMS 垃圾回收器的主要缺点是,在进行垃圾回收时需要占用大量的 CPU 资源,因此可能会影响应用程序的吞吐量。此外,由于 CMS 垃圾回收器采用的是标记-清除算法,因此可能会导致内存碎片的问题,进而影响应用程序的性能。CMS 垃圾回收器的主要优点是可以在应用程序运行的同时进行垃圾回收,因此对应用程序的响应时间影响较小。原创 2023-04-10 16:10:45 · 289 阅读 · 0 评论 -
4.10 说一下 JVM 有哪些垃圾回收器?
它是JDK11中新引入的一种垃圾回收器,以获取最短回收停顿时间为目标,可以在不超过10ms的停顿时间内进行全堆垃圾回收,适用于超大型的内存应用场景。:它是一种以获取最短回收停顿时间为目标的垃圾回收器,使用分代收集算法进行垃圾回收,在回收过程中只暂停少量的应用线程,适用于大型的内存应用场景。:它是一种以获取最短回收停顿时间为目标的垃圾回收器,使用多线程进行垃圾回收,在回收过程中只暂停少量的应用线程,适用于响应时间敏感的应用场景。原创 2023-04-10 15:47:45 · 568 阅读 · 0 评论 -
4.9 说一下 JVM 有哪些垃圾回收算法?
这样,在新的区域中,存活对象的地址是连续的,从而可以很方便地进行内存分配。需要注意的是,标记-整理算法中需要大量的移动对象操作,因此它的性能通常比复制算法差一些,尤其是在老年代的内存回收中。在标记阶段,垃圾回收器会从根对象(通常是一些全局变量)开始遍历程序的对象图,标记所有可达对象,即所有可以从根对象到达的对象,而不可达的对象则被视为垃圾。分代算法的优点是可以充分利用对象生命周期的特点,将不同生命周期的对象放在不同的代中,对每个代采用不同的垃圾回收算法,提高了垃圾回收效率。原创 2023-04-10 12:14:35 · 89 阅读 · 0 评论 -
4.7 在Java中,对象什么时候可以被垃圾回收
如果一个对象只被弱引用或软引用所引用,那么它就可以被垃圾回收。弱引用和软引用是 Java 中的两种特殊的引用类型,它们不会阻止对象被垃圾回收。:如果一个对象没有任何引用指向它,那么它就可以被垃圾回收。可以通过将引用置为 null 来手动释放对象占用的内存。:如果 JVM 中的内存不足,那么垃圾回收器就会被触发,回收一些不再使用的对象,释放内存空间。原创 2023-04-10 11:32:38 · 2197 阅读 · 0 评论 -
4.8 JVM中的永久代中会发生垃圾回收吗
不过,即使在 JDK 8 之前,JVM 的永久代中也有可能发生垃圾回收。如果使用了大量的动态代理、反射、代码生成等技术,会导致永久代中产生大量的无用类,从而导致永久代的内存溢出。在这种情况下,JVM 会触发 Full GC,尝试回收永久代中的无用类,以释放内存空间。在 JDK 8 及之前的版本中,JVM 中的永久代是存放类信息、常量、静态变量等的区域,不会被垃圾回收。这是因为永久代使用的是永久代内存,不属于堆内存,不受垃圾回收机制的管理。元空间使用的是本地内存,也不属于堆内存,也不会被垃圾回收。原创 2023-04-09 21:54:15 · 829 阅读 · 0 评论 -
4.5 Java 中都有哪些引用类型?
虚引用不能直接通过 get() 方法访问到它所指向的对象,它主要用于在对象被垃圾回收时收到一个系统通知,或者在一个对象被销毁时进行一些清理工作。软引用可以用来实现缓存等功能,当内存不足时,缓存中的对象可以被回收,避免了 OutOfMemoryError 错误。(Weak Reference):弱引用是一种比软引用更弱化的引用类型。(Strong Reference):指向对象的引用是强引用,它是默认的引用类型,如果一个对象具有强引用,那么垃圾回收器不会回收这个对象,即使 JVM 内存不足也不会回收。原创 2023-04-09 20:59:05 · 65 阅读 · 0 评论 -
4.3 垃圾回收的优点和原理
1 标记-清除算法:这是垃圾回收最基本的算法,它通过标记所有可以访问的内存,然后清除所有不能访问的内存。在标记阶段,垃圾回收器会标记所有可以访问的内存,并且将存活的对象移到存活区的一端。在整理阶段,垃圾回收器会将存活对象移到存活区的一端,并且将存活区和空闲区合并,从而避免内存碎片的产生。1 简化程序员的工作:垃圾回收可以自动地回收不再使用的内存,从而减轻了程序员手动管理内存的工作量。4 改善程序的性能:尽管垃圾回收会带来一定的性能开销,但由于它可以避免内存泄漏等问题,从而改善了程序的性能。原创 2023-04-09 20:58:05 · 375 阅读 · 0 评论 -
4.2 GC是什么?为什么要GC
在Java程序中,每当我们创建一个对象时,JVM会在堆内存中为该对象分配一定大小的内存空间。但是,当该对象不再被使用时,这段内存空间就成为了“垃圾”,如果不及时回收这些垃圾,就会导致内存泄漏、内存溢出等问题,进而影响程序的稳定性和性能。因此,引入垃圾回收机制(即GC)可以自动地回收不再使用的对象,释放它们所占用的内存空间,从而提高了程序的可靠性和稳定性。GC是“垃圾回收”(Garbage Collection)的缩写。它是一种自动化的内存管理机制,用于回收不再使用的对象以及释放它们所占用的内存空间。原创 2023-04-09 16:44:19 · 92 阅读 · 0 评论 -
Java垃圾回收机制
垃圾收集过程:垃圾回收器在运行过程中,通过标记存活对象和回收无用对象的方式来进行垃圾回收。具体来说,垃圾回收器在堆中标记出所有存活的对象,然后清理掉所有未被标记的对象。Java垃圾回收机制是指一种自动化的内存管理方式,Java程序员无需手动管理内存,而是由JVM(Java虚拟机)自动进行垃圾回收。垃圾收集时机:JVM会根据不同的垃圾收集算法和策略,动态地选择合适的时机进行垃圾回收。一般来说,当内存不足时,就会触发垃圾回收。垃圾回收算法:垃圾回收器使用不同的垃圾回收算法来处理内存中的对象。原创 2023-04-09 16:18:57 · 323 阅读 · 0 评论 -
2.1 对象的创建
链接: Java虚拟机(JVM)面试(2022版)这是创建 Java 对象最常见的方式,通过 new 关键字可以实例化一个类,并且在实例化时可以调用该类的构造函数。例如:2 使用 Class 类的 newInstance() 方法创建对象Java 中的 Class 类提供了一个 newInstance() 方法,可以动态地创建对象。例如这种方式需要通过反射来实现,因此比较灵活,但也存在一定的性能开销。Java 中的 clone() 方法可以创建一个对象的副本。要使用该方法,需要实现 Cloneabl原创 2023-04-09 11:11:01 · 46 阅读 · 0 评论 -
元空间(Metaspace)
元空间的主要作用是存储类的元数据信息,包括类的结构信息、方法信息、字段信息、注解信息等。与永久代不同,元空间的内存空间并不在虚拟机堆中,而是在本机物理内存中分配,因此元空间的大小不受虚拟机堆的大小限制,也不会触发垃圾收集器的工作。总之,元空间是Java 8引入的一个新的内存区域,用于存储类的元数据信息。永久代的存储的是类的元数据信息,而元空间存储的是类的元数据信息和动态生成的类的元数据信息,如动态代理类、反射生成的类等。永久代的大小是固定的,而元空间的大小可以动态调整。原创 2023-04-09 10:56:12 · 5331 阅读 · 0 评论