java对象内存模型,深入理解Java内存模型

  java对象内存模型,深入理解Java内存模型

  如何解决写爬虫IP受阻的问题?立即使用。

  SF采访:你了解Java内存模型吗?

  30个面试问题:程序记忆的分布,五个部分

  (学习视频分享:java教学视频)

  一、java程序的执行过程

  Java源代码文件(。java后缀)将被编译成字节码文件(。类后缀),然后每个类的字节码文件会被JVM中的类加载器加载,然后被JVM执行引擎执行。在程序执行的整个过程中,JVM会使用一个空间来存储程序执行过程中需要的数据和相关信息。这个空间一般称为运行时数据区,也就是我们常说的JVM内存。所以在Java中,我们常说的内存管理就是管理这个空间(如何分配和回收内存空间)。

  (更多相关面试问题推荐:java面试问答)

  第二,运行时数据区包括哪些部分:

  方法区域:

  方法区是由所有线程共享的内存区,它用于存储数据,如类信息、常数、静态变量和由实时编译器编译并由虚拟机加载的代码。当方法区域不能满足内存分配要求时,将抛出OutOfMemoryError异常。

  方法区存储类的版本、字段、方法、接口和常量池。字面量和符号引用存储在常量池中。符号包括:1。类的完全限定名,2。字段名和属性,3。方法名称和属性。

  JVM堆(Java堆):

  Java堆也是线程共享的内存区域。它是在虚拟机启动时创建的,是Java虚拟机管理的最大内存块。主要用来存储对象实例,几乎所有的对象实例都在这里分配内存。注意,Java堆是垃圾收集器管理的主要区域,所以它通常被称为GC堆。如果堆中没有内存来完成实例分配,并且堆不能再扩展,那么将会抛出OutOfMemoryError异常。

  程序计数器寄存器:

  当字节码解释器工作时,它通过改变这个计数器的值来选择下一个要执行的字节码指令。分支、循环、跳转、异常处理、线程恢复等基本功能。全靠这个柜台。

  多线程中,为了使线程在切换后恢复到正确的执行位置,每个线程都需要一个独立的程序计数器,每个线程互不影响,独立存储,所以这个内存是线程私有的。

  虚拟机堆栈(Java虚拟机堆栈):

  Java栈也是线程私有的,它的生命周期和线程是一样的。虚拟机描述了Java方法执行的内存模型:每个方法都会创建一个堆栈框架来存储局部变量表、操作数堆栈、动态链表、方法退出信息等。每个方法从调用到执行的过程,对应的是一个栈帧从栈到虚拟机栈中栈的过程。

  本机方法堆栈:

  本地方法栈属于线程的私有数据区,主要与虚拟机使用的原生方法有关。一般我们不需要关心这个区域。

  (相关推荐:java入门)以上是java面试的内存模型细节。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: