首页 > 系统相关 >jvm内存模型

jvm内存模型

时间:2023-02-09 18:57:26浏览次数:45  
标签:Java jvm 模型 程序 线程 内存 JVM 进程

1.  jvm的本质

          用于解释和运行Java程序的C++程序,本质就是一个程序。

2.  JVM主要由三部分组成

       (1)执行引擎:用于解释字节码

       (2)类加载器:将编译后的字节码文件加载到JVM中的内存里,以及将一些核心类库等加载进去

       (3)运行时数据区:主要包括线程共享区和线程独占区

           

 3.  内存模型

      (1)JVM对于操作系统来说,就是一个C++程序,所以JVM本身的内存结构就是C/C++的内存模型(即:操作系统的进程的内存模型)

           

    (2)Java程序栈和堆都是在JVM堆上分配的。 java的内存模型如下图所示:

           

              为什么Java的堆栈不在JVM的栈上分配? 原因:JVM的栈是受操作系统自动管理的,随时可能被回收

           为什么不直接使用JVM堆呢?非要在JVM堆的基础上重新实现堆呢? 原因:C++的堆内存是程序员分配和释放的,不是操作系统自动管理,无法实现自动管理。

 4.  java程序的进程

      启动一个Java应用程序时,会启动一个JVM进程。在这个JVM进程内部,所有Java程序代码都是以线程来运行的。

     JVM找到程序的入口点main()方法,然后运行main()方法,这样就产生了一个线程,这个线程被称为主线程。当main()方法结束后,主线程运行完成,JVM进程也随即退出。

     每当使用Java命令执行一个class类时,实际上就是启动了一个JVM进程。理论上,在该进程的内部至少会启动两个线程,一个是main线程,另一个是GC(垃圾回收)线程。实际上,执行一个Java程序后,线程数量远远不止两个,达到了18个之多。

总结:        

Java中的直接内存指的是操作系统提供的堆空间
java进程
    代码段
    数据段
    栈
    ----------------------------
    堆
       JVM内存模型
          虚拟机栈:存放方法调用过程中的参数、局部变量和返回值。(每个线程都有)
          本地方法栈:每个线程都有,调用底层非Java的本地代码,存放调用过程中的参数、局部变量和返回值等信息。(每个线程都有)
          堆区:共享
          程序计数器:指示下一条需要执行的指令的地址(每个线程都有)
          方法区:共享(java7之后去掉),JDK1.8之后使用元数据空间代替了方法区,不再使用JVM内存,而是使用直接内存

标签:Java,jvm,模型,程序,线程,内存,JVM,进程
From: https://www.cnblogs.com/dkhlaojogo/p/17106636.html

相关文章