jvm在存储区域
当区域执行的数据
程序计数器
较小的内存空间,能够看作是当前线程所运行的字节码的行号指示器。
为了线程切换后能恢复到正确的运行位置,每天线程都须要有一个独立的程序计数器,所以我们称这类内存区域为“线程私有”的内存。
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在存储区域的更多相关文章
- JVM的内存区域划分
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的 ...
- 01 深入理解JVM的内存区域
先来看看JVM运行时候的内存区域,如下图: 大多数 JVM 将内存区域划分为 Heap(堆).方法区.Stack(栈).本地方法栈.程序计数器.其中 Heap 和 方法区 是线程共享的,Stack.本 ...
- JVM的内存区域模型
首先要明白一个概念,就是JVM的内存区域划分与java的内存区域模型是两个不同的概念,前者指的是在java中jvm会将一个程序划分为哪些块来存储对应的数据,后者是一个更宏观上的j概念,指的是java线 ...
- 5.JVM的内存区域划分
一.JVM介绍 1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟 ...
- JVM的内存区域划分(转)
原文链接:JVM的内存区域划分 JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内 ...
- 【java】JVM的内存区域划分
学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行 ...
- 第1篇--基于jdk7和jdk8分析 JVM的内存区域
基于jdk7和jdk8分析 JVM的内存区域 目录前言1.什么是JVM2.JRE/JDK/JVM是什么关系3.JVM执行程序的过程4. JVM的生命周期5.JVM垃圾回收一.运行时数据区的组成1.程 ...
- 深入理解JVM - Java内存区域与内存溢出异常 - 第二章
一 运行时数据区域 JVM在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间. 程序计数器 程序计数器(Program Counter ...
- JVM内存各个区域分工简单介绍
JVM内存各个区域简单介绍: 程序计数器:程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器. 在使用多线程时,为了线程切换后能恢复到正确的执行位置,每条线程都需要有个独立 ...
随机推荐
- windows phone (18) Border元素
原文:windows phone (18) Border元素 Border类是对某一个对象的周围边框,背景,或者同时绘制两者,首先看一个简单的例子进行分析[作者:神舟龍] xaml文件: <!- ...
- swift 学习资源 大集合
今天看到一个swift学习网站,其中我们收集了大量的学习资源 Swift 介绍 Swift 介绍 来自 Apple 官方 Swift 简单介绍 (@peng_gong) 一篇不错的中文简单介绍 [译] ...
- 这么多的技术,作为一个freshman,什么研究?
科学技术,从哪里学习? 杨问了我几个最近:"如何学习技术?".说实话,其实,我自己只是一个资深兄弟.对于这个答案.这是更难以在本身回答. 可是.既然比师弟们多吃了几年 ...
- 很久没来这里,今天的评测java怪东西,左右Date类和时间戳转换
在发展过程中,经常会遇到利用上课时间.说话的Date类就不得不提时间戳,左右fr=aladdin" target="_blank">的定义大家能够看看网上对时间戳的 ...
- 更具体的描述JNI
JNI事实上,Java Native Interface缩写,也就是说,java本地接口. 它提供了许多API实现和Java并与其他语言的沟通(主要C&C++). 也许很多人认为Java够劲. ...
- 4pdf
http://www.cnblogs.com/haocool/archive/2013/03/16/2962547.html
- Case when 的使用方法
SQL Case when 的使用方法 Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THE ...
- oracle查询和编写数据字典
在项目交付时假设须要编写数据字典,能够採用以下的方法.首先执行以下的sql语句 SELECT A.TABLE_NAME AS 表名, A.COLUMN_NAME AS 字段名, DECODE(A.CH ...
- PC2日记——坑爹的第一天2014/08/28
我不想安慰自己说今天是因为第一次将pc2用于实际的比赛经验不足而导致的今天出现种种问题,我想说的是自从我開始干后台我所做的每一件事都是第一次,所以这绝对不是让自己免去责怪的理由:我想说的是假设我今天是 ...
- 应用层协议系列(两)——HTTPserver之http协议分析
上一篇文章<抄nginx Httpserver设计与实现(一)--多进程和多通道IO现>中实现了一个仿照nginx的支持高并发的server.但仅仅是实现了port监听和数据接收.并没有实 ...