当区域执行的数据

 JVM存储器的管理分为几个时间之后的数据区的实施:程序计数器、JavaVM栈、本地方法栈、Java堆、方法区(包括常量池的实现)。
 

程序计数器

较小的内存空间,能够看作是当前线程所运行的字节码的行号指示器。

为了线程切换后能恢复到正确的运行位置,每天线程都须要有一个独立的程序计数器,所以我们称这类内存区域为“线程私有”的内存。

java虚拟机栈

这类内存区域也是线程私有的,它的生命周期与线程同样。相当于汇编里的堆栈,当线程运行到相应的方法。栈就会不断地将方法參数、局部变量(基本数据类型、对象引用、returnAddress类型)、操作数栈等信息进栈出栈。来达到函数调用。

本地方法栈

与虚拟机栈所发挥的作用是很相似的,差别为本地方法栈为虚拟机使用到的Native方法服务。

Java堆

java堆是全部线程共享的一块内存区域,唯一目的就是存放对象实例。实例化对象时,仅仅是存储对象里面的很量属性,对象里的方法并不用copy到堆中(相当于C语言的struct),方法是在运行时,在栈中分配參数变量、局部变量等内存。

分配内存,有两种方法:“指针碰撞”。java堆中的内存是绝对规整的,全部用过的内存放一边,空暇的内存放还有一边,中间放着一个指针作为分界点的指示器,分配内存时仅仅只是是移动指针。垃圾收集器带有压缩整理功能。使内存每时每刻都是规整的。

“空暇列表”。java堆不是规整的,虚拟机维护一个列表。记录哪些内存块是可用的。

对象訪问的方式有两种:
使用句柄:
 
 
直接指针:
 

方法区:

方法区也是各个线程共享的内存区域。存储已被虚拟机载入的类信息、常量、静态变量、即时编译器编译后的代码等数据。尽管java虚拟机规范把方法区描写叙述为堆的一个逻辑部分,可是它却有一个别名叫Non-Heap(非堆),目的应该是与java堆区分开来。

执行时常量池:

执行时常量池是方法区的一部分。Class文件里除了有类的版本号、字段、方法、接口等描写叙述信息外,另一项信息是常量池。用于存放编译期生成的各种字面量和符号引用,这部分内容将在类载入后进入方法区的执行时常量池中存放。

执行时常量池。相对于Class文件常量池的另外一个重要特征是具备动态性,执行期间也能够将新的常量放入执行时常量池。如:String类的intern()方法。

本文引用:周志明的《深入理解java虚拟机》

转载请标明出处:http://blog.csdn.net/u012367513/article/details/38656909

版权声明:本文博客原创文章。博客,未经同意,不得转载。

jvm在存储区域的更多相关文章

  1. JVM的内存区域划分

            JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的 ...

  2. 01 深入理解JVM的内存区域

    先来看看JVM运行时候的内存区域,如下图: 大多数 JVM 将内存区域划分为 Heap(堆).方法区.Stack(栈).本地方法栈.程序计数器.其中 Heap 和 方法区 是线程共享的,Stack.本 ...

  3. JVM的内存区域模型

    首先要明白一个概念,就是JVM的内存区域划分与java的内存区域模型是两个不同的概念,前者指的是在java中jvm会将一个程序划分为哪些块来存储对应的数据,后者是一个更宏观上的j概念,指的是java线 ...

  4. 5.JVM的内存区域划分

    一.JVM介绍 1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟 ...

  5. JVM的内存区域划分(转)

    原文链接:JVM的内存区域划分 JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内 ...

  6. 【java】JVM的内存区域划分

    学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行 ...

  7. 第1篇--基于jdk7和jdk8分析 JVM的内存区域

     基于jdk7和jdk8分析 JVM的内存区域 目录前言1.什么是JVM2.JRE/JDK/JVM是什么关系3.JVM执行程序的过程4. JVM的生命周期5.JVM垃圾回收一.运行时数据区的组成1.程 ...

  8. 深入理解JVM - Java内存区域与内存溢出异常 - 第二章

    一 运行时数据区域 JVM在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间. 程序计数器 程序计数器(Program Counter ...

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

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

随机推荐

  1. DWR异步产生的问题

    默认情况下,DRW是异步的.当数据量大的时候,数据还未加载完就已经提交了.这样会照成数据丢失.为了解决这个问题应该改变DWR的数据加载方式,改为同步的.这样就不会照成数据丢失. DWREngine.s ...

  2. ZOJ 2110 Tempter of the Bone(条件迷宫DFS,HDU1010)

    题意  一仅仅狗要逃离迷宫  能够往上下左右4个方向走  每走一步耗时1s  每一个格子仅仅能走一次且迷宫的门仅仅在t时刻打开一次  问狗是否有可能逃离这个迷宫 直接DFS  直道找到满足条件的路径 ...

  3. Android Ant 和 Gradle 打包流程和效率对照

    一.Ant 打包:(下载ant.配置环境变量就不说了) 1.进入命令行模式,并切换到项目文件夹.运行例如以下命令为ADT创建的项目加入ant build支持: android update proje ...

  4. Windows Phone开发(24):启动器与选择器之发送短信

    原文:Windows Phone开发(24):启动器与选择器之发送短信 本节我们通过一个简单的发送短信示例来演示一下如果配合使用PhoneNumberChooserTask和SmsComposeTas ...

  5. jdk并发包 CopyOnWriteArrayList源代码分析

    CopyOnWriteArrayList是jdk1.5并法包里面用于处理高并发下.读多写少的情况下.减少锁等待的集合类.以下对该类实现做一个简要的分析 1,首先CopyOnWriteArrayList ...

  6. MVC json

    1. .net MVC中Controller 在mvc中所有的controller类都必须使用"Controller"后缀来命名 并且对Action也有一定的要求: 必须是一个pu ...

  7. Sliverlight之 矢量绘图

    目标:在两天内完成一个环形图的绘制 准备:第5章 矢量绘图 1,形状绘图(见Project11) (1)线条用什么标签表示,它有哪几个重要属性 说明: Line标签 x1 y1表示起始点x,y坐标 x ...

  8. C. Captain Marmot (Codeforces Round #271)

    C. Captain Marmot time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. Android 开发环境搭建之——ADT-Bundle for Windows

    ADT-Bundle for Windows 是由Google Android官方提供的集成式IDE,已经包含了Eclipse,你无需再去下载Eclipse,并且里面已集成了插件,它解决了大部分新手通 ...

  10. Linux 没有 my.cnf 解决方案文件完全我自己的整个教程很多口才

    我看过好多关于Linux下没有my.cnf的博客,都是什么rmp安装没有my.cnf文件啊,然后什么两个方法啊,我就无语了,大家要是知道就不会查资料了,你们敢不敢负责点?说具体点?有的说从 /usr/ ...