JVM学习第三篇思考:一个Java类在Jvm内存中是怎么存在的
JVM学习第三篇思考:一个Java类在Jvm内存中是怎么存在的又名:Java虚拟机的内存模型(JMM)是什么样的.通过前面两篇文章的学习,我们知道了一个Java类的生命周期及类加载器。我们可以得到如下两幅图:类生命周期:父类委托机制:思考:我们编写的类中的变量、方法、对象这些都需要内存存放的。那么在运行时候这些数据在Java虚拟机内存中是怎么存放的呢?本文目标:凯哥(凯哥Java:kaigejav
JVM学习第三篇思考:一个Java类在Jvm内存中是怎么存在的
又名:Java虚拟机的内存模型(JMM)是什么样的.
通过前面两篇文章的学习,我们知道了一个Java类的生命周期及类加载器。我们可以得到如下两幅图:
类生命周期:

父类委托机制:

思考:

我们编写的类中的变量、方法、对象这些都需要内存存放的。那么在运行时候这些数据在Java虚拟机内存中是怎么存放的呢?
本文目标:
凯哥(凯哥Java:kaigejava)希望通过本文学习,大家对Java虚拟机运行时数据区域有更深的了解
我们写的代码在JVM中是怎么存在的?
1:我们现在看看总体Java运行时数据模型:

2:我们来看看下面这段代码,执行的时候,在JVM中数据存放:

上面代码很简单,那么对应的变量、对象等在内存中都是怎么分配的呢?
2.1:方法区
注:在JDK1.8之后,方法区被元空间替换了。
方法区:用来存放的是类的信息、常量、静态变量等。该区域也是各个线程共享的内存区域。
根据Java虚拟机规范中的规定,当方法去无法满足内存分配的时候,会抛出:OutOfMemoryError异常的。
根据上面的 定义,我们可以知道比如我们JvmDemo.class信息、static string str=“jvmDemo”是在方法区存放的。
对应咱们代码,方法区存放的如下图:

2.2:堆区
堆区是JVM所管理的内存中的最大的一块区域。该区域是所有线程共享的一块内存区域。该区域空间在虚拟机启动的时候就被创建了(-Xms的设置。后面凯哥(凯哥Java:kaigejava)也会详细讲解的)。
此区域的目的是存放对象实例的。几乎所有的对象实例都是在这里分配的。Java虚拟机规范中是这么描述的:所有的对象的实例以及数组都要在堆上分配。
堆区是垃圾收集器管理的主要区域(后面凯哥(凯哥Java
原创不易,完成人机校验,阅读全文
相关推荐
并发Java并发包下锁学习第三篇-锁是怎么维护内部队列的JVM学习系列JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇并发Java并发编程之CAS第三篇-CAS的缺点RABBITMQ学习系列教程rabbitMQ高级整合应用第三篇 SimpleMessageListenerContainer面试宝典第三篇:锁的由来,并发三特性全解析NACOS【Spring boot Nacos系列教程】Nacos第三篇:多环境配置工作小总结mysql常用功能之删除一张表中重复数据&ab表中a存在b不存在的 数据SPRING CLOUDSpring cloud系列教程第三篇-子项目payment项目图文搭建