1、java虚拟机在运行的时候会把内存分为以下几个区域,如图:

运行时数据区,学习java虚拟机必须要弄清楚这里所有的区概况及作用.

1) 程序计数器:线程私有,一块较小的内存,行号指示器,字节码解释器工作时就是通过改变这个计数器的值,来选下一条字节码指令,比如分支,循环,跳转,异常 处理,线程恢复等基础功能靠这个计数器来完成。ps:由于java的多线程是线程轮流切换的,一个处理器(多处理器叫一个内核)同一时刻只会执行一条线 程,所以必须保证这个程序计算器是线程私有的 。此内存区域是唯一一个没有规定任何内存溢出的地方。

2)java虚拟机栈,这也是程序员所关心的两块内存中的一块,栈内存。

   特点: 1、线程私有 2、生命周期与线程相同 3、描述的java方法执行的内存模型。


  描述 :一个线程执行会有至少一个方法,没当线程进入一个方法,会在虚拟机栈创建一个栈帧,用于存储局部变量表(基本7种数据类型,对象引用)、操作帧,方法出 口等信息。每一个方法被调用即入栈,完成即出栈。当然我们通常说的栈 ,就是局部变量表。虚拟机栈会出现两种异常,当虚拟机请求栈的深度大于所允许的深度,会抛出StackOverFlowerError,虚拟机栈扩展到无 法拥有足够的内存,会抛出OutOfMemoryError。

3)本地方法栈。和虚拟机栈作用一样,执行的都是native方法,即本地方法,随线程而生,随线程而死。

4)堆。我们最关注的一块,先说下他们的几个特点。

   特点:1、内存最大的一块;2、被所有线程共享;3、虚拟机启动的时候创建;4、目的:存放对象的实例。

 5)方法区:被所有线程共享,存储内容:

                                                     1、虚拟机加载的类信息;

                                                     2、常量

                                                     3、静态变量

                                                     4、即时编译器编译后的代码

 此区域包括了运行时常量池。方法区内存回收较少,一般是两种,常量池回收,类型卸载。

6)直接内存,非java虚拟机的一部分,也会频繁使用、 

JVM运行数据区的更多相关文章

  1. java虚拟机 jvm 栈数据区

    java栈帧还是需要一些数据支持常量池的解析.正常方法的返回和异常的处理.大部分的java字节码指令需要进行常量池的访问,在栈帧数据区中保存着访问常量池的指针,方便程序访问java常量池.如下图所示: ...

  2. JVM运行原理详解

    1.JVM简析:      作为一名Java使用者,掌握JVM的体系结构也是很有必要的.      说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Ja ...

  3. 「JVM」知识点详解一:JVM运行原理详解

    前言 JVM 一直都是面试的必考点,大家都知道,但是要把它搞清楚又好像不是特别容易.JVM 的知识点太散,不系统,今天带大家详细的了解一下jvm的运行原理. 正文 1 什么是JVM? JVM是Java ...

  4. JVM内存结构——运行时数据区

    在Java虚拟机规范中将Java运行时数据划分为6种,分别为: PC寄存器(程序计数器) Java栈 堆 方法区 运行时常量池 本地方法栈 一.PC寄存器(程序计数器) PC寄存器(Program C ...

  5. Jvm基础(1)-Java运行时数据区

    最近在看<深入理解Java虚拟机>,里面讲到了Java运行时数据区,这是Jvm基本知识,把读书笔记记录在此.这些知识属于常识,都能查到的,如果我有理解不对的地方,还请指出. 首先把图贴上来 ...

  6. JVM学习笔记-运行时数据区

    不同于C,C++程序,Java程序的内存管理工作由Java虚拟机(JVM)接管,这减低了java程序员的负担,但如果出现内存泄露与溢出问题如报OutOfMemory,StackOverFlow异常错误 ...

  7. [译]JVM运行时数据区

    (本篇文章翻译自JVM Run-Time Data Areas) 这是我阅读JVM规范的笔记,而且我画了一个图来帮助我理解. 1.每一个单独的线程(非共享的)的数据区 针对每一个单独的线程的数据区包括 ...

  8. JVM入门——运行时数据区

    这张图我相信基本上对JVM有点接触的都应该很熟悉,可以说这是JVM入门的第一课.其中的“堆”和“虚拟机栈(栈)”更是耳熟能详.下面将围绕这张图对JVM的运行时数据区做一个简单介绍. 程序计数器(Pro ...

  9. 深入理解JVM(2)——运行时数据区

    1.运行时数据区 1.1.程序计数器 记录当前线程正在执行的字节码指令的地址,如果正在执行的是 Native 方法,这个计数器值则为空. 1.2.虚拟机栈 每个 Java 方法在执行的同时会创建一个栈 ...

随机推荐

  1. Spring 创建bean的模式

    在默认情况下,spring创建bean是单例模式 scope="singleton ",还有一种方式为多例模式[prototype]     scope          sing ...

  2. PHPCMS V9 学习总结(转)

    转自:http://www.cnblogs.com/Braveliu/p/5074930.html 在实现PHPCMS网站过程中,根据业务需求,我们遇到很多问题,特此总结如下,以便大家参考学习. [1 ...

  3. sass编译css(转自阮一峰)

    一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 本文总结了SASS的主要用法.我的目标是,有了这篇文章,日常的一 ...

  4. ThinkPHP框架下,jq实现在div中添加标签并且div的大小会随之变化

    php初学者,有什么不对的还请指正. 首先是在html页面中用jq实现添加标签:divAchivePersonnal是select所在的div的外层div,divselectAchivePersonn ...

  5. C# 进销存系统开发框架

    C/S系统开发框架-企业版 V4.0 (Enterprise Edition) 简介: http://www.csframework.com/cs-framework-4.0.htm 视频下载: 百度 ...

  6. openerp import l field size limit

    modify the file addons/base_import/models.py add the following line at the very begining of the _con ...

  7. %s的用法

    %s 正常输出字符串printf("%s\n", "abcd"); //normal output abcd %8s 最少输出8位长度的字符串,不够在字符串左侧 ...

  8. linker command failed with exit code 1

    这种问题,通常出现在添加第三方库文件或者多人开发时. 这种问题一般是找不到文件而导致的链接错误. 我们可以从如下几个方面着手排查. 1.以如下错误为例,如果是多人开发,你同步完成后发现出现如下的错误. ...

  9. ubuntu進入dos界面命令 ubuntu進入圖形界面命令

    切换界面: ctrl + alt + F1是切到终端模式 Alt+F7 切到图形界面

  10. c# 循环语句练习题;

    1. 求100以内质数的和 2. 兔子问题 3. 九九乘法表:   一行一行打印: 4. 有一张超大的纸:   纸质的厚度是0.01:   对折多少次,可以达到珠峰的高度:   按照8848来计算: ...