jvm运行数据分布
本人看的深入理解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运行数据分布的更多相关文章
- IntelliJ IDEA设置JVM运行参数
2015十一月 28 原 IntelliJ IDEA设置JVM运行参数 分类:JavaSE (11566) (1) 打开 IDEA 安装目录,看到有一个 bin 目录,其中有两个 vmoptions ...
- Java(JVM运行时)各种内存区域详解及扩展
本文整理于 Java内存与垃圾回收调优 Java 堆内存 从几个sample来学习Java堆,方法区,Java栈和本地方法栈 首先来一张图让我们理清楚java运行时状态: 诚然,如上图所示:java ...
- JVM 运行时内存结构
1.JVM内存模型 JVM运行时内存=共享内存区+线程内存区 1).共享内存区 共享内存区=持久带+堆 持久带=方法区+其他 堆=Old Space ...
- 深入解析java虚拟机-jvm运行机制
转自oschina 一:JVM基础概念 JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字 ...
- JVM运行时内存结构
原文转载自:http://my.oschina.net/sunchp/blog/369707 1.JVM内存模型 JVM运行时内存=共享内存区+线程内存区 1).共享内存区 共享内存区=持久带+堆 持 ...
- Jstatd方式远程监控Linux下 JVM运行情况
前言 最近一个项目部署在服务器上运行时出现了问题,经过排查发现是java内存溢出的问题,所以为了实时监控服务器java内存的情况,需要远程查看服务器上JVM内存的一些情况.另外服务器系统是CentOS ...
- 对JVM运行时常量池的一些理解
1.JVM运行时常量池在内存的方法区中(在jdk8中,移除了方法区) 2.JVM运行时常量池中的内容主要是从各个类型的class文件的常量池中获取,对于字符串常量,可以调用intern方法人为添加,而 ...
- JVM核心之JVM运行和类加载全过程
为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程序的灵活性 类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终 ...
- Java Jvm运行机制原理
一:简介 在学习Java虚拟机之前,也就是Jvm之前,我想大家能够带着问题去学习,这样的话,大家学习起来也会比较有所获! 1.Java虚拟机(Jvm)是什么? 2.Java虚拟机是用来干什么的? 3. ...
随机推荐
- js笔记——js异常处理
异常捕获 try...catch结构: try { //需要捕获的代码块 } catch (e) { console.log(e.name + ": " + e.message); ...
- 在Windows下安装Memcached
Windows下的Memcache安装: 需要运行命令行工具cmd 请以管理员权限运行 开始->附件->命令提示符,以管理员身份运行 假如当前C:\windows\system32,输入c ...
- Servlet字符编码过滤器,实现图书信息的添加功能,避免产生文字乱码现象的产生
同样的代码,网上可以找到和我一模一样的代码和配置,比我的更加详细,但是我重新写一个博客的原因自是把错误的原因写出来,因为这就是个坑,我弄了一天,希望对你们有所帮助.只为初学者发现错误不知道怎么解决有所 ...
- ASP.NET MVC 微信公众号支付,微信公众平台配置
微信公众号支付,首先要登录微信公众号进行配置: 第一步:配置网页授权域名
- Leetcode 69 Sqrt(x) 二分查找(二分答案)
可怕的同时考数值溢出和二分的酱油题之一,常在各种小公司的笔试中充当大题来给你好看... 题意很简单,在<二分查找综述>中有描述. 重点:使用简单粗暴的long long来避免溢出,二分均方 ...
- JavaScript 模板引擎实现原理解析
1.入门实例 首先我们来看一个简单模板: <script type="template" id="template"> <h2> < ...
- HTTP协议从入门到大牛,初识HTTP协议(学习笔记)
HTTP数据传输协议 当访问一个网页时,浏览器会向服务器发起一条HTTP请求,接着服务器会去寻找相应的资源,如果请求成功,就会把这个对象,对象类型,对象长度以及其他的信息放在HTTP响应中,发送给客户 ...
- JS中的匿名函数
整理自:http://www.cnblogs.com/playerlife/archive/2012/10/17/2727683.html 一.什么是匿名函数? 在Javascript定义一个函数一般 ...
- SQL-基础知识
SQL Server中的关于时间转换和获取时间的方法 1.获取当前UTC时间 GETUTCDATE()
- 【web前端面试题整理02】前端面试题第二弹袭来,接招!
前言 今天本来准备先了解下node.js的,但是,看看我们一个小时前与一个小时后的差距: 既然如此,我们继续来搜集我们的前端面试题大业吧!!! 特别感谢玉面小肥鱼提供哟,@玉面小飞鱼 题目一览 Jav ...