Java当虚拟机数据区域

执行数据区主要包括:方法区、堆、VM栈、本地方法栈、程序计数器。

当中方法区和栈是线程共享的区域,另外三块区域是每一个线程私有的区域。各个数据区的功能简单说明例如以下:

程序计数器:当前线程所运行的字节码的行号指示器。

虚拟机栈:描写叙述Java方法运行的内存模型——每个方法在运行的同一时候都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用直至运行完毕的过程。就相应一个栈帧在虚拟机栈中入栈到出栈的过程。假设栈的深度大于虚拟机所同意的深度,将抛出StackOverflowError异常。假设栈扩展时无法申请到足够的内存,将抛出OutOfMemoryError异常(下述的本地方法栈类同)。

本地方法栈:与虚拟机栈的作用类似。虚拟机栈为Java方法服务,本地方法栈为Native方法服务。

Java堆:在虚拟机启动的时候创建。作用是存放对象实例。通过-Xmx和-Xms控制堆的大小。假设在堆中没有内存完毕实例分配,而且堆也无法再扩展时。将抛出OutOfMemoryError异常。

方法区:作用是存储已被虚拟机载入的类信息、常量、静态变量等(在HotSpot中称此区域为Permanent Generation)。

对象的创建

对象的创建包含四个步骤:类载入检查、为新生对象分配内存、初始化为零值、设置对象头。

一、类载入检查

虚拟机遇到一条new指令时,收件将检查该指令的參数能否在常量池(执行时常量池是方法区的一部分。

Class文件除了有类的版本号、字段、方法、接口等描写叙述信息外,另一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类载入后进入方法区的执行时常量池中存放。)中定位到一个类的符号引用,而且检查这个符号引用代表的类是否已被载入、解析和初始化过。

假设没有,那必须先执行对应的类载入过程。

二、为新生对象分配内存

对象所需内存大小在类载入完毕后便全然确定。则分配内存等同于把一块确定大小的内存从Java堆中划分开来。

分两种情况:Java堆中内存是绝对规整的(称为指针碰撞。Bump the pointer)、内存不规整(称为空暇列表。Free List)。在规整的Java堆中,用过的内存放一边,空暇的内存放一边。中间放一个指针作为分界点。在不规整的Java堆中,虚拟机维护一个列表记录哪些块是可用的。选择那种分配方式由Java堆是否规整决定。而Java堆是否规整由採用的垃圾收集器是否带有压缩整理功能决定。如:在使用Serial、ParNew等带Compact过程的收集器时,採用的分配算法是指针碰撞。而使用CMS基于Mark-Sweep算法的收集器时,採用空暇列表。

三、分配内存过程须要保证线程安全

对分配内存空间的动作进行同步处理。或者是把内存分配的动作依照线程划分在不同的空间进行(即本地线程分配缓冲Thread Local Allocation Buffer)。

四、对象头的设置

说明是哪个类的实例、怎样找到类的元数据信息、对象的哈希码、对象的GC年龄。

对象的訪问定位

Java程序通过栈上得reference数据操作堆上得详细对象。有两种訪问方式:使用句柄和直接指针。

一、使用句柄

reference中存储的是稳定的句柄地址。在对象实例数据被移动时(垃圾回收时)仅仅会改变句柄中的实例数据指针,而reference本身不须要改变。

二、使用直接指针

速度快,由于它节省了一次指针定位的时间开销。

说明:本文的内容參考书籍《深入理解Java虚准机(文章2版本)》

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

Java存储区域——JVM札记<一个>的更多相关文章

  1. Java内存管理:Java内存区域 JVM运行时数据区

    转自:https://blog.csdn.net/tjiyu/article/details/53915869 下面我们详细了解Java内存区域:先说明JVM规范定义的JVM运行时分配的数据区有哪些, ...

  2. JVM性能优化系列-(1) Java内存区域

    1. Java内存区域 1.1 运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.主要包括:程序计数器.虚拟机栈.本地方法栈.Java堆.方法区(运 ...

  3. [Java] Java 技术和 JVM 基础

    Java 由 Sun 公司在 1995 首次发布,既是一门编程语言,也是一个计算平台. Java 运行时版本 Java Runtime Edition 当你下载 Java 完时候,你会得到一个 Jav ...

  4. IT兄弟连 Java语法教程 Java开发环境 JVM、JRE、JDK

    要想开发Java程序,就需要知道什么是JVM.JRE以及JDK.JVM是运行Java程序的核心,JRE是支持Java程序运行的环境,而JDK是Java开发的核心,下面我们分别具体介绍它们以及它们之间的 ...

  5. java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)

    概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...

  6. JVM自动内存管理-Java内存区域与内存溢出异常

    摘要: JVM内存的划分,导致内存溢出异常的可能区域. 1. JVM运行时内存区域 JVM在执行Java程序的过程中会把它所管理的内存划分为以下几个区域: 1.1 程序计数器 程序计数器是一块较小的内 ...

  7. Java内存区域与内存溢出异常(JVM学习系列1)

    相对于C.C++等语言来说,Java语言一个很美好的特性就是自动内存管理机制.C语言等在申请堆内存时,需要malloc内存,用完还有手动进行free操作,若程序员忘记回收内存,那这块内存就只能在进程退 ...

  8. JVM参数配置 java内存区域

    java内存区域 一些基本概念 http://www.importnew.com/18694.html https://www.cnblogs.com/wangyayun/p/6557851.html ...

  9. JVM系列1:Java内存区域

    JVM系列主要分享自己都虚拟机的理解,我自学时的知识框架多来源于<深入理解Java虚拟机_JVM高级特性与最佳实践>这本书,感兴趣的朋友可直接去阅读这本书. 本系列暂定有3部分,它们是学习 ...

随机推荐

  1. fscanf()功能具体解释

    一旦文件被解析常规时间或使用正则表达式.或者是敲自己太傻代码来解析一个普通文件. 今天突然发现c该图书馆有一个现成的文件可以解析常规功能,这是fscanf()功能.哎 曾经自己做了这么多无用功.在这里 ...

  2. Android自带样式

    Android系统自带样式: android:theme="@android:style/Theme.Dialog" 将一个Activity显示为对话框模式 android:the ...

  3. 谈谈CListCtrl 扩展风格设置方法-SetExtendedStyle和ModifyStyleEx 比較

    谈谈CListCtrl 扩展风格设置方法 --------------------------------------SetExtendedStyle和ModifyStyleEx 比較 对于刚開始学习 ...

  4. 玩转Web之Json(一)-----easy ui+ajax + json 中关于Json的解析问题

    在easy ui中使用Ajax+Json实现前后的数据交互时,当后台数据传输到客户端是需对Json数据进行解析,这里将对Json数据解析做简单总结. (一) 对于服务器返回的数据若没有做类型说明,需要 ...

  5. 交换A与B值的四种方法

    在网上看到了这样一道面试题,"int A=5,int B=2,怎样交换A与B的值",或许这是一道简单到不能再简单的题,但能作为一道面试题,肯定有其独特之处 大多数人会通过定义第三个 ...

  6. PowerCmd(转)

    PowerCmd 是一款Windows CMD 的增强工具,可以比普通CMD工具提供更多选项,例如: 1.多窗口集成,再也不见满屏的Cmd窗口: 2.命令日志记录,再也不怕命令滚动多快,有多少,我们都 ...

  7. oracle db于,一个特定的数据字典pct miss其计算公式

    这篇文章是原创文章,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/38766801 本文提到的数据字典.以dc_histogram_d ...

  8. uploadify控制 上传图片到百度云存储

    最近使用uploadify 控制图片上传到百度网盘....总的想法是 招待会uploadify获取文件传入后台,调用百度云存储api上传到百度网盘,返回url 联系.送存储在数据库中的链接.因此,我们 ...

  9. BZOJ 1834 ZJOI2010 network 网络扩展 Dinic+EK费用流

    标题效果:给定一个n积分m无向图边,每一方有一个扩展的成本c.代表扩张1费用的交通,寻求最大流量和扩大的最大流量k最小成本 第一问直接运行的最大流量 第二个问题将是连接到一个流的末端每个边缘的起点是正 ...

  10. 1!到n!的和

    Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 23  Solved: 14 [Submit][Status][Web Board] Descriptio ...