JVM基于JDK8:主要组成部分、作用及堆栈区别全解析

JVM

JVM基于JDK8:主要组成部分、作用及堆栈区别全解析

基于JDK8

1. 说一说JVM的主要组成部分

2. 说一下 JVM 的作用?

首先借助编译器把Java代码转变为字节码。接着类加载器把字节码加载进内存。然后将其放置在运行时数据区的方法区内。字节码文件只是JVM的一套指令集规范。它不能直接交给底层操作系统去执行。所以需要特定的命令解析器执行引擎。该引擎把字节码翻译成底层系统指令。之后交由CPU去执行。在这个过程中要调用其他语言的本地库接口来实现整个程序的功能。

3. 说一下堆栈的区别?

物理地址

堆的物理地址分配对象并非连续。故而性能会慢一些。在进行GC时需考虑不连续分配。所以存在各种算法。例如标记-消除、复制、标记-压缩、分代(也就是新生代采用复制算法,老年代采用标记——压缩)

故而性能快

内存分别

堆是不连续的。分配的内存是在运行期确认的。所以堆大小不固定。一般来说堆的大小远远大于栈。

栈是连续的。因此分配的内存大小需在编译期确认。其大小是固定的。

存放的内容

堆存放的是对象的实例和数组。因此该区更关注的是数据的存储

栈进行存放:存放局部变量。存放操作数栈。存放返回结果。这个区域更加关注的是程序方法的执行。

PS:

静态变量放在方法区 静态的对象还是放在堆。 程序的可见度

堆对于整个应用程序都是共享、可见的。

栈仅在线程中可见。因而它是线程私有的。其生命周期与线程一样。

4. Java内存泄漏

内存泄漏是指不再被使用的对象或者变量一直被占据在内存中。

严格来讲 只有对象不再会被程序使用 然而GC又无法回收它们的情形 才称作内存泄漏

从理论上讲 Java 存在 GC 垃圾回收机制 即不再使用的对象 会被 GC 自动回收 会自动从内存中清除

但是即便如此 Java仍存在内存泄漏情况 Java导致内存泄露原因明确 若长生命周期对象持有短生命周期对象引用 便很可能发生内存泄露 即便短生命周期对象已不再需要 但因长生命周期对象持有其引用 导致其不能被回收 此即Java中内存泄露发生场景

说一下JVM有哪些垃圾回收器

7. 说一下类加载的执行过程?

8. 什么是双亲委派模型?为什么要使用双亲委派模型?

什么是双亲委派模型

为什么要使用双亲委派模型

可以避免内存里出现多份相同的字节码。要是没有双亲委派模型,由各个类加载器自行加载。当用户编写了一个与java.lang.Object同名的类并置于ClassPath中,多个类加载器都会去加载这个类到内存里,系统中就会出现多个不同的Object类。如此一来,类之间的比较结果以及类的唯一性就无法得到保证。并且,若不采用这种双亲委派模型,会给虚拟机的安全带来隐患。所以 要让类对象比较有意义 前提是 它们要被同一个类加载器加载

9. CMS垃圾清理的过程

CMS的整个过程相较于之前的收集器更为复杂。它的整个过程划分成4个主要阶段。分别是初始标记阶段、并发标记阶段、重新标记阶段以及并发清除阶段。涉及STW的阶段主要有初始标记和重新标记stop-the-world

10. 常用的 JVM 调优的参数都有哪些?

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

25阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读