Python知识分享网 - 专业的Python学习网站 学Python,上Python222
Java JVM 面试题总结 PDF 下载
匿名网友发布于:2024-02-15 11:15:22
(侵权举报)
(假如点击没反应,多刷新两次就OK!)

Java JVM 面试题总结 PDF 下载  图1

 

 

资料内容:

 

JVM 的主要作用是什么?
 

JVM 就是 Java Virtual Machine(Java虚拟机)的缩写,JVM 屏蔽了与具体操作系统平台相关的信息,使
Java 程序只需生成在 Java 虚拟机上运行的目标代码 (字节码),就可以在不同的平台上运行。

 

请你描述一下 Java 的内存区域?
 

JVM 在执行 Java 程序的过程中会把它管理的内存分为若干个不同的区域,这些组成部分有些是线程私有
的,有些则是线程共享的,Java 内存区域也叫做运行时数据区,它的具体划分如下:

 

虚拟机栈 : Java 虚拟机栈是线程私有的数据区,Java 虚拟机栈的生命周期与线程相同,虚拟机栈也
是局部变量的存储位置。方法在执行过程中,会在虚拟机栈中创建一个 栈帧(stack frame) 。每
个方法执行的过程就对应了一个入栈和出栈的过程。

 

本地方法栈 : 本地方法栈也是线程私有的数据区,本地方法栈存储的区域主要是 Java 中使用
native 关键字修饰的方法所存储的区域。

 

程序计数器 :程序计数器也是线程私有的数据区,这部分区域用于存储线程的指令地址,用于判断
线程的分支、循环、跳转、异常、线程切换和恢复等功能,这些都通过程序计数器来完成。

 

方法区 :方法区是各个线程共享的内存区域,它用于存储虚拟机加载的 类信息、常量、静态变
量、即时编译器编译后的代码等数据。

 

堆 :堆是线程共享的数据区,堆是 JVM 中最大的一块存储区域,所有的对象实例都会分配在堆
上。JDK 1.7后,字符串常量池从永久代中剥离出来,存放在堆中。
堆空间的内存分配(默认情况下):

 

老年代 : 三分之二的堆空间
 

年轻代 : 三分之一的堆空间
     eden 区: 8/10 的年轻代空间
     survivor 0 : 1/10 的年轻代空间
     survivor 1 : 1/10 的年轻代空间
命令行上执行如下命令,会查看默认的 JVM 参数。

 

java -XX:+PrintFlagsFinal -version


输出的内容非常多,但是只有两行能够反映出上面的内存分配结果

 

运行时常量池 :运行时常量池又被称为 Runtime Constant Pool ,这块区域是方法区的一部分,
它的名字非常有意思,通常被称为 非堆 。它并不要求常量一定只有在编译期才能产生,也就是并
非编译期间将常量放在常量池中,运行期间也可以将新的常量放入常量池中,String 的 intern 方法
就是一个典型的例子。