java技术面试必问:JVM 内存模型讲解

java技术面试必问:JVM内存模型讲解今天我们就来聊一聊Java内存模型,面试中面试官会通过考察你对jvm的理解更深 入得了解你的水平。在了解jvm内存模型前我们先回顾下,java程序的执行过程:j

javaJVM 技术面试必问:内存模型讲解 今天我们就来聊一聊Java内存模型,面试中面试官会通过考察你对jvm的理解更深入 得了解你的水平。在了解jvm内存模型前我们先回顾下,java程序的执行过程: java文件在通过java编译器生产.class字节码文件,然后由jvm中的类加载器加载 各个类中的字节码文件,加载完成后由jvm执行引擎执行,在整个加载过程中,jvm用一段空间 来存储程序执行期间需要的数据和相关信息,这个空间就叫做jvm内存。 一、JVM的重要性 首先你应该知道,运行一个Java应用程序,我们必须要先安装JDK或者JRE。这是 因为Java应用在编译后会变成字节码,然后通过字节码运行在JVM中,而JVM是JRE的核心 组成部分。 二、优点 JVM不仅承担了Java字节码的分析(JITcompiler)和执行(Runtime),同时也内置了 自动内存分配管理机制。这个机制可以大大降低手动分配回收机制可能带来的内存泄露和内存 溢出风险,使Java开发人员不需要关注每个对象的内存分配以及回收,从而更专注于业务本身。 三、缺点 这个机制在提升Java开发效率的同时,也容易使Java开发人员过度依赖于自动化,弱 化对内存的管理能力,这样系统就很容易发生JVM的堆内存异常、垃圾回收(GC)的不合适以及 GC次数过于频繁等问题,这些都将直接影响到应用服务的性能。 四、内存模型 JVM内存模型共分为5个区:堆(Heap)、方法区(MethodArea)、程序计数器(Program CounterRegister)、虚拟机栈(VMStack)、本地方法栈(NativeMethodStack)。 其中,堆(Heap)、方法区(MethodArea)为线程共享,程序计数器(ProgramCounter Register)、虚拟机栈(VMStack)、本地方法栈(NativeMethodStack)为线程隔离。 五、堆(Heap) 堆是JVM内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都 被分配到了堆内存中。 堆被划分为新生代和老年代,新生代又被进一步划分为Eden区和Survivor区,最后 Survivor由FromSurvivor和ToSurvivor组成。 随着Java版本的更新,其内容又有了一些新的变化:在Java6版本中,永久代在非堆 内存区;到了Java7版本,永久代的静态变量和运行时常量池被合并到了堆中;而到了Java8, 永久代被元空间(处于本地内存)取代了。

腾讯文库java技术面试必问:JVM