面试系列二:精选大数据面试真题JVM专项-附答案详细解析 (2)

简答:堆这块区域是JVM中最大的,应用的对象和数据都是存在这个区域,这块区域也是线程共享的,也是 gc 主要的回收区,一个 JVM 实例只存在一个堆类存。堆内存的大小是可以调节的。

精答:对于大多数应用来说,堆空间是jvm内存中最大的一块。Java堆是被所有线程共享,虚拟机启动时创建,此内存区域唯一的目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配,但是随着JIT编译器的发展和逃逸分析技术逐渐成熟,栈上分配,标量替换优化技术将会导致一些微妙的变化发生,所有的对象都分配在堆上也就变得不那么绝对了。

Java堆是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”。从内存回收角度看,由于现在收集器基本都采用分代收集算法,所以Java堆还可以细分为:新生代和老年代;再细致一点的有Eden空间,From Survivor空间,To Survivor空间等。从内存分配的角度来看,线程共享的Java堆中可能划分出多个线程私有的分配缓冲区。不过无论如何划分,都与存放内容无关,无论哪个区域,存储的都仍然是对象实例,进一步划分的目的是为了更好的回收内存,或者更快的分配内存。(如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。)

方法区(线程共享)

简答:和堆一样所有线程共享,主要用于存储已被jvm加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

精答:方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。简单说,所有定义的方法的信息都保存在该区域,此区域属于共享区间。

静态变量,常量,类信息(构造方法/接口定义),运行时常量池存在方法区中;但是实例变量存在堆内存中,和方法区无关。

在JDK1.7发布的HotSpot中,已经把字符串常量池移除方法区了

常量池(线程共享):

简答:运行时常量池是方法区的一部分。用于存放编译期生成的各种字面量和符号引用,它的重要特性是动态性,即Java语言并不要求常量一定只能在编译期产生,运行期间也可能产生新的常量,这些常量被放在运行时常量池中。

精答:运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

Java虚拟机对class文件每一部分的格式都有严格规定,每一个字节用于存储哪种数据都必须符合规范才会被jvm认可。但对于运行时常量池,Java虚拟机规范没做任何细节要求。

运行时常量池有个重要特性是动态性,Java语言不要求常量一定只在编译期才能产生,也就是并非预置入class文件中常量池的内容才能进入方法区的运行时常量池,运行期间也有可能将新的常量放入池中,这种特性使用最多的是String类的intern()方法。

既然运行时常量池是方法区的一部分,自然受到方法区内存的限制。当常量池无法再申请到内存时会抛出outOfMemeryError异常

面试系列二:精选大数据面试真题JVM专项-附答案详细解析

jdk 1.8 同 jdk 1.7 比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存

第二题:类加载相关(新浪微博) 问:jvm加载类的过程主要有哪些,具体怎么加载?

答:

简答:类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程。分为五个步骤:加载 -> 验证 -> 准备 -> 解析 -> 初始化。加载:将外部的 .class 文件加载到Java虚拟机中;验证:确保加载进来的 calss 文件包含的额信息符合 Java 虚拟机的要求;准备:为类变量分配内存,设置类变量的初始值;解析:将常量池内的符号引用 转为 直接引用;初始化:初始化类变量和静态代码块。

精答:前方预警,内容较长,做好准备!

一个Java文件从编码完成到最终执行,一般主要包括两个过程:编译、运行

编译:即把我们写好的java文件,通过javac命令编译成字节码,也就是我们常说的.class文件。

运行:则是把编译生成的.class文件交给Java虚拟机(JVM)执行。

而我们所说的类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程。

类加载过程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspjxg.html