本人看的深入理解jvm(该版本的java se7)

java运行时数据区域

Java虚拟机在执行java程序时,把内存划分为几个不同的阶段,存在不同的存在时间。不同的用途

先上图

程序计数器:是jvm中一小块内存空间,可以当做当前线程的字节码文件的行号,字节码解释器通过改变这个值来获取下一个指令。Java多线程通过线程轮流切换处理器的执行时间来执行的,大家知道现代处理器的原理,每次一个核上只能一个线程进行运转,由于中断,因此每个程序计数器都是独立的,这些程序计数器的所在的内存称为线程私有的内存。如果线程执行的是java方法,那么程序计数器指代的是当前字节码指令的地址,如果是native方法,程序计数器的值为空,这处区域是jvm没有定义OutOfMemoryError错误

虚拟机栈:打个比方,一般吧java内存粗略分为堆栈,这个虚拟机栈中的局部变量表就是传说中的栈,线程私有的,描述java方法执行的内存模型:每个方法在执行的时候都会建立一个这个;用于存储局部变量表,操作数栈,动态链接,方法出口等,每一个方法从调用到执行完,就代表一个栈帧在虚拟机栈中从入栈到出栈的过程其中局部变量表存放了编译器可知的基本变量(boolean,int,double,float,char),还有引用类型(),renturnAddress类型(指向了一个字节码的地址)局部变量表的大小信息在编译期间就确定好了,运行期间不会改变其大小,该虚拟机栈回报2个错误,第一个就是请求的栈帧大于虚拟机栈的深度回报StackOverflowError错误第二个错误就是虚拟机栈动态扩张,扩张到无法申请到内存时报OutOfMemoryError错误

本地方法栈:和虚拟机栈差不多,不过不是java方法是native方法,java规范对native方法的语言和数据格式没有强制要求虚拟机可以自由的去实现它,报的错误也是StackOverflowError错误和OutOfMemoryError错误

Java堆:第一它是所有线程共享的,虚拟机启动创建堆,主要用于存储对象实例和数组,Java垃圾处理器主要处理的就是java堆,因此java堆也被称为gc堆,从内存回收的角度上讲可以划分为新生代和老生代,从内存分配角度讲,可以划分出多个线程私有的内存区域等,java堆有多种划分方式,但是无论怎么划分都是存储对象实例,多重划分是为了更好的划分内存和回收内存,java堆可以位于内存上不连续的空间上,只要逻辑上连续即可,java堆可以实现为固定大小的,也可以实现为可扩展大小的,要是java堆上无法为实例对象分配内存,那么就会报这个OutOfMemoryError

方法区:各个线程共享的区域,主要存储被虚拟机加载的类信息,常量,静态变量,编译器编译后的代码,和java堆一样逻辑上内存,可扩展的实现大小,这个区域的垃圾回收主要针对常量池的回收和类型的卸载,其中类型的卸载要求比较高,但是必要的垃圾回收是必要的,以前低版本的就出现过严重的内存泄漏。

运行期常量池:编译后的Class文件中的类名啊,方法名啊,常量啊被加载到虚拟机后就会放到方法去的运行常量池来保存,当然常量不止可以只是在编译期间放到常量池中,还可以用string.intern()方法(如果常量池中存在当前字符串, 就会直接返回当前字符串. 如果常量池中没有此字符串, 会将此字符串放入常量池中后, 再返回)来在运行期间放到常量池中,当然要是常量池中无法申请到内存时就会报出OutOfMemoryError这个经典错误

jvm运行数据分布的更多相关文章

  1. IntelliJ IDEA设置JVM运行参数

    2015十一月 28 原 IntelliJ IDEA设置JVM运行参数 分类:JavaSE (11566) (1) 打开 IDEA 安装目录,看到有一个 bin 目录,其中有两个 vmoptions ...

  2. Java(JVM运行时)各种内存区域详解及扩展

    本文整理于  Java内存与垃圾回收调优 Java 堆内存 从几个sample来学习Java堆,方法区,Java栈和本地方法栈 首先来一张图让我们理清楚java运行时状态: 诚然,如上图所示:java ...

  3. JVM 运行时内存结构

      1.JVM内存模型       JVM运行时内存=共享内存区+线程内存区 1).共享内存区       共享内存区=持久带+堆       持久带=方法区+其他       堆=Old Space ...

  4. 深入解析java虚拟机-jvm运行机制

    转自oschina 一:JVM基础概念 JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字 ...

  5. JVM运行时内存结构

    原文转载自:http://my.oschina.net/sunchp/blog/369707 1.JVM内存模型 JVM运行时内存=共享内存区+线程内存区 1).共享内存区 共享内存区=持久带+堆 持 ...

  6. Jstatd方式远程监控Linux下 JVM运行情况

    前言 最近一个项目部署在服务器上运行时出现了问题,经过排查发现是java内存溢出的问题,所以为了实时监控服务器java内存的情况,需要远程查看服务器上JVM内存的一些情况.另外服务器系统是CentOS ...

  7. 对JVM运行时常量池的一些理解

    1.JVM运行时常量池在内存的方法区中(在jdk8中,移除了方法区) 2.JVM运行时常量池中的内容主要是从各个类型的class文件的常量池中获取,对于字符串常量,可以调用intern方法人为添加,而 ...

  8. JVM核心之JVM运行和类加载全过程

    为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程序的灵活性 类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终 ...

  9. Java Jvm运行机制原理

    一:简介 在学习Java虚拟机之前,也就是Jvm之前,我想大家能够带着问题去学习,这样的话,大家学习起来也会比较有所获! 1.Java虚拟机(Jvm)是什么? 2.Java虚拟机是用来干什么的? 3. ...

随机推荐

  1. Mybatis入门例子

    Mybatis是轻量级的持久化框架,的确上手非常快. Mybatis大体上的思路就是由一个总的config文件配置全局的信息,比如mysql连接信息等.然后再mapper中指定查询的sql,以及参数和 ...

  2. atitit 短信接口规范与短信解决方案.docx

    atitit 短信接口规范与短信解决方案.docx 1.1. 国内比较著名的短信提供商1 1.2. 短信接口规范1 1.3. 短信sdk构成1 1.4. 短信的实现1 1.5. SmsServiceY ...

  3. Atitit dsl实现(1)------异常的库模式实现  异常的ast结构

    Atitit dsl实现(1)------异常的库模式实现  异常的ast结构 1.1. Keyword 1 1.2. 异常的ast模型 1 1.3. Astview的jar org.eclipse. ...

  4. iOS----CocoaPods的安装、使用和,原理+参考流程+常见问题

    一.什么是CocoaPods CocoaPods是iOS项目的依赖管理工具,该项目源码在Github上管理.开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得我们可以节省设置和第 ...

  5. 每天一个linux命令(37):date命令

    在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参数 ...

  6. WP中的语音识别(上):基本识别

    WP 8.1目前许多内容仍处于未确定状态,因此,本文所提及的语音识别,是基于WP8的,在8.1中也差不多,也是使用运行时API来实现,如果大家不知道什么是运行时API,也没关系,不影响学习和开发,因为 ...

  7. bootstrap-table 分页的问题

    文档网站 http://wenzhixin.net.cn/p/bootstrap-table/docs/examples.html#via-javascript-table 问题1 :服务器端取不到f ...

  8. SharePoint Server 2013开发之旅(一):新的开发平台和典型开发场景介绍

    我终于开始写这个系列文章,实际上确实有一段时间没有动笔了.最近重新安装了一套SharePoint Server 2013的环境,计划利用工作之余的时间为大家写一点新的东西. SharePoint Se ...

  9. C#基础-----面向对象

    C#基础-----面向对象(一) 分类: C#基础2015-06-08 14:10 2人阅读 评论(0) 收藏 举报 1,面向对象 什么是面向对象?一个分析问题的方式(增强了程序的可扩展性) 几个名词 ...

  10. spring aop源码实现分析

    1. 先分析Advice before执行Cglib2AopProxy的intercept方法: /** * General purpose AOP callback. Used when the t ...