• 让中国高铁领跑世界——我国高铁装备业唯一女总工程师梁建英 2019-04-19
  • eHub发布“鲁班”智能营销云 重塑智能时代的商业变革 2019-04-18
  • 拜博口腔医疗集团创始人、董事长黎昌仁获第十二届人民企业社会责任奖年度人物奖 2019-04-18
  • 巴川中学王苗:留守儿童长大了 2019-04-15
  • 真正学进去 积极讲出来 扎实做起来市委常委部门分别召开会议传达学习全国两会精神 2019-04-15
  • 实拍武汉万人“父母相亲会”  现场“摆摊”征婚 2019-04-13
  • 丸子-热门标签-华商生活 2019-04-13
  • 房奴!房奴!亚历山大幸福吗? 2019-04-06
  • 我在吃饭,重点在那?重点在饭,难道我只能吃饭吗?看着就想笑 2019-04-06
  • 神州专车爱心助考 30城上线高考“神”助攻专车 2019-04-04
  • 《朝圣之路》第三季直面邪教争议性问题 2019-04-04
  • 冰箱除异味的七个小窍门 2019-03-31
  • 更别忘了马克思对共产主义设定的另一个条件:劳动不再是谋生的手段。这一点哈儿是怎么也不能理解的,哈儿嘛,夏虫不可语冰嘛。 2019-03-31
  • 俄方:美方毁坏俄领事机构大门驱动装置进入搜查 2019-03-29
  • 女性之声——全国妇联 2019-03-29
  • JVM内存简单总结

    广东十一选5一定牛 www.aavbg.com   根据自己的认识,简单总结下Java中的数据存储及内存分析。
      Java中的内存大致可以分为三块:栈内存、堆内存、方法区内存,看图说话。

      1)、栈

      栈(stack):栈是限定仅在表头进行插入和删除操作的线性表。栈作为一种数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。在Java中,栈则是一个具有以上属性的动态内存区域。

      通常在栈中执行各种方法(包括main(...)方法):首先通过方法区内存将方法通过压栈形式压入栈中进行执行(有先后顺序)。栈中存储基本数据类型和引用数据类型的地址--局部变量?;褂芯褪钦皇窍叱潭老淼?,每一个线程都有自己的线程栈,所以栈可以有多个。JVM是基于栈的虚拟机,JVM为每个新创建的线程都分配一个栈。也就是说,对于一个Java程序来说,它的运行就是通过对栈的操作来完成的。栈以帧为单位保存线程的状态。JVM对栈只进行两种操作:以帧为单位的压栈和出栈操作。我们知道,某个线程正在执行的方法称为此线程的当前方法,我们可能不知道,当前方法使用的帧称为当前帧。当线程激活一个Java方法,JVM就会在线程的Java栈里新压入一个帧。这个帧自然成为了当前帧,在此方法执行期间,这个帧将用来保存参数,局部变量,中间计算过程和其他数据。从Java的这种分配机制来看,栈又可以这样理解:栈是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有先进后出的特性。

      2)、堆

      堆(heap):堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆中某个节点的值总是不大于或不小于其父节点的值,且堆总是一棵完全二叉树。

      每一个Java应用都唯一对应一个JVM实例,每一个实例唯一对应一个堆。应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有的线程共享。跟C/C++不同,Java中分配堆内存是自动初始化的。Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在栈中分配。也就是说,在建立一个对象时,从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在栈中分配的内存实际上只是一个指向这个堆对象的引用而已。
      3)、方法区
      方法区(Method Area):线程共享,存储已经被JVM加载的类信息、常量、静态变量、编译后的代码等等。

      通常方法区里面包括JVM已加载的类信息和运行时常量池。JVM已加载的类信息包括:类型信息、类型的常量池(存放该类型所用到的常量的有序集合,包括直接常量【如:字符串、整数、浮点数的常量】和对其他类型,字段,方法的符号引用)、字段信息(字段修饰符、字段的类型、字段名称)、方法信息(方法修饰符、方法返回类型、方法名、方法参数【个数,类型,顺序】、方法字节码)、类变量(静态变量)、指向类加载器的引用(每一个被JVM加载的类型,都保存这个类加载器的引用,类加载器动态链接时会用到)、指向Class实例的引用(类加载的过程中,虚拟机会创建这个类型的Class实例,方法区中必须保存对该对象的引用。通过类名.class.forName(String className)来查找获得该实例的引用,然后创建该类的对象)。

      运行时常量池:Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种字面常量和符号引用,这部分内容被类加载后进入方法区的运行时常量池中存放。运行时常量池相对于Class文件常量池的另外一个特征具有动态性,可以在运行期间将新的常量放入池中。

    posted @ 2019-03-16 22:28 吴永吉 阅读(...) 评论(...) 编辑 收藏
  • 让中国高铁领跑世界——我国高铁装备业唯一女总工程师梁建英 2019-04-19
  • eHub发布“鲁班”智能营销云 重塑智能时代的商业变革 2019-04-18
  • 拜博口腔医疗集团创始人、董事长黎昌仁获第十二届人民企业社会责任奖年度人物奖 2019-04-18
  • 巴川中学王苗:留守儿童长大了 2019-04-15
  • 真正学进去 积极讲出来 扎实做起来市委常委部门分别召开会议传达学习全国两会精神 2019-04-15
  • 实拍武汉万人“父母相亲会”  现场“摆摊”征婚 2019-04-13
  • 丸子-热门标签-华商生活 2019-04-13
  • 房奴!房奴!亚历山大幸福吗? 2019-04-06
  • 我在吃饭,重点在那?重点在饭,难道我只能吃饭吗?看着就想笑 2019-04-06
  • 神州专车爱心助考 30城上线高考“神”助攻专车 2019-04-04
  • 《朝圣之路》第三季直面邪教争议性问题 2019-04-04
  • 冰箱除异味的七个小窍门 2019-03-31
  • 更别忘了马克思对共产主义设定的另一个条件:劳动不再是谋生的手段。这一点哈儿是怎么也不能理解的,哈儿嘛,夏虫不可语冰嘛。 2019-03-31
  • 俄方:美方毁坏俄领事机构大门驱动装置进入搜查 2019-03-29
  • 女性之声——全国妇联 2019-03-29