根据自己的认识,简单总结下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文件常量池的另外一个特征具有动态性,可以在运行期间将新的常量放入池中。

JVM内存简单总结的更多相关文章

  1. JVM内存简单理解

    1.首先简单说一下CPU与内存之间的关系 CPU运转速度快,磁盘的读写速度远远不及CPU运转速度,所以设计了内存来缓冲CPU等待磁盘读写:随着CPU的发展,内存读写也远远跟不上CPU的读写速度,CPU ...

  2. 最简单例子图解JVM内存分配和回收

    一.简介 JVM采用分代垃圾回收.在JVM的内存空间中把堆空间分为年老代和年轻代.将大量(据说是90%以上)创建了没多久就会消亡的对象存储在年轻代,而年老代中存放生命周期长久的实例对象.年轻代中又被分 ...

  3. JVM内存结构简单认知

    关于JVM的面试传送门:https://blog.csdn.net/shengmingqijiquan/article/details/77508471 JVM内存结构主要划分为:堆,jvm栈,本地方 ...

  4. 最简单例子图解JVM内存分配和回收(转)

    本文转自http://ifeve.com/a-simple-example-demo-jvm-allocation-and-gc/ http://www.idouba.net/a-simple-exa ...

  5. 简单说说 Java 的 JVM 内存结构

    问:简单说说 Java 的 JVM 内存结构分为哪几个部分? 答:JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分,分别解释如下.虚拟机栈:线程私有的,每个方法在执行时会创建一个 ...

  6. JVM内存各个区域分工简单介绍

    JVM内存各个区域简单介绍: 程序计数器:程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器. 在使用多线程时,为了线程切换后能恢复到正确的执行位置,每条线程都需要有个独立 ...

  7. 最简单的JVM内存结构图

    JVM内存结构图 大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前一样,案例先行,方便大家理解记忆. /** * @author :jiaolian * @dat ...

  8. Jvm 内存浅析 及 GC个人学习总结

    从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...

  9. Tomcat中JVM内存溢出及合理配置及maxThreads如何配置(转)

    来源:http://www.tot.name/html/20150530/20150530102930.htm Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚 ...

随机推荐

  1. 配置ssh免密登录服务器

    当前服务器环境为ubantu 14.04 一.本地 ①生成id_rsa   id_rsa.pub ssh-keygen -t rsa -C "xxxxx@xxxxx.com" ss ...

  2. CentOS7使用firewalld防火墙配置端口

    安装启用firewalld防火墙 CentOS7默认的防火墙是firewalld 如果没有firewalld防火墙,可以执行yum install firewalld 命令进行安装 firewalld ...

  3. 洛谷P2822 组合数问题(题解)

    https://www.luogu.org/problemnew/show/P2822(题目传送) 先了解一下有关组合数的公式:(m在上,n在下) 组合数通项公式:C(n,m)=n!/[m!(n-m) ...

  4. Linux 安装node.js和npm教程

    前言:最近想做一款移动端的网站,在网上找了下,想用vue.js来提供技术支持,看了下安装教程,发现都是用npm来安装的,没办法,只能去装个npm了,之前没有装过这个包管理工具,这也是第一次安装吧,记录 ...

  5. Docker:dockerfile自动构建镜像 [六]

    一.手动docker镜像的缺点 相对于手动制作的docker镜像,使用dockerfile构建的镜像有以下优点: 1.dockerfile只有几kb,便于传输 2.使用dockerfile构建出来的镜 ...

  6. [再寄小读者之数学篇](2014-06-21 Beal-Kaot-Majda type logarithmic Sobolev inequality)

    For $f\in H^s(\bbR^3)$ with $s>\cfrac{3}{2}$, we have $$\bex \sen{f}_{L^\infty}\leq C\sex{1+\sen{ ...

  7. SCI,EI,ISTP

    SCI:   Science Citation Index EI:     The Engineering Index ISTP:  Index to Scientific & Technic ...

  8. [物理学与PDEs]第3章习题3电磁场的矢势在 Lorentz 规范下满足的方程

    设 $\phi$ 及 ${\bf A}$ 分别为电磁场的标势及矢势 (见第一章 $\S$ 6). 试证明: 若 $\phi$ 及 ${\bf A}$ 满足条件 $$\bex \phi+\cfrac{1 ...

  9. react中键盘enter事件处理

    对于常见的搜索需求业务场景,用户输入完成后,点击enter事件请求数据,要求不提交页面,实现数据局部更新,这需要用到react中的表单Forms. 处理方法: (1)html书写 form标签中去掉a ...

  10. 🍓vue & react 一些重要但没必要死记硬背的东西