JVM运行数据区
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运行数据区的更多相关文章
- java虚拟机 jvm 栈数据区
java栈帧还是需要一些数据支持常量池的解析.正常方法的返回和异常的处理.大部分的java字节码指令需要进行常量池的访问,在栈帧数据区中保存着访问常量池的指针,方便程序访问java常量池.如下图所示: ...
- JVM运行原理详解
1.JVM简析: 作为一名Java使用者,掌握JVM的体系结构也是很有必要的. 说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Ja ...
- 「JVM」知识点详解一:JVM运行原理详解
前言 JVM 一直都是面试的必考点,大家都知道,但是要把它搞清楚又好像不是特别容易.JVM 的知识点太散,不系统,今天带大家详细的了解一下jvm的运行原理. 正文 1 什么是JVM? JVM是Java ...
- JVM内存结构——运行时数据区
在Java虚拟机规范中将Java运行时数据划分为6种,分别为: PC寄存器(程序计数器) Java栈 堆 方法区 运行时常量池 本地方法栈 一.PC寄存器(程序计数器) PC寄存器(Program C ...
- Jvm基础(1)-Java运行时数据区
最近在看<深入理解Java虚拟机>,里面讲到了Java运行时数据区,这是Jvm基本知识,把读书笔记记录在此.这些知识属于常识,都能查到的,如果我有理解不对的地方,还请指出. 首先把图贴上来 ...
- JVM学习笔记-运行时数据区
不同于C,C++程序,Java程序的内存管理工作由Java虚拟机(JVM)接管,这减低了java程序员的负担,但如果出现内存泄露与溢出问题如报OutOfMemory,StackOverFlow异常错误 ...
- [译]JVM运行时数据区
(本篇文章翻译自JVM Run-Time Data Areas) 这是我阅读JVM规范的笔记,而且我画了一个图来帮助我理解. 1.每一个单独的线程(非共享的)的数据区 针对每一个单独的线程的数据区包括 ...
- JVM入门——运行时数据区
这张图我相信基本上对JVM有点接触的都应该很熟悉,可以说这是JVM入门的第一课.其中的“堆”和“虚拟机栈(栈)”更是耳熟能详.下面将围绕这张图对JVM的运行时数据区做一个简单介绍. 程序计数器(Pro ...
- 深入理解JVM(2)——运行时数据区
1.运行时数据区 1.1.程序计数器 记录当前线程正在执行的字节码指令的地址,如果正在执行的是 Native 方法,这个计数器值则为空. 1.2.虚拟机栈 每个 Java 方法在执行的同时会创建一个栈 ...
随机推荐
- Java学习----你可以知道对象的工作结果(获取方法的返回值)
1.写返回类型 2.return 返回值 3.定义变量接受返回值 public class App2 { public String [] print(String msg, int num) { f ...
- 前端模板文件化jQuery插件 $.loadTemplates
工作中使用前端模板引擎,如 artTemplate.jsRender,来替代拼接字符串. 可是直接把模板写在页面上会带来页面臃肿,模板无法重用,与 ASP.NET等后端语言语法冲突等问题. 所以将多个 ...
- 封装cookie组件
var Cookie = { // 读取 get: function(name){ var cookieStr = "; "+document.cookie+"; &qu ...
- linux系统删除空间后系统分区空间仍不释放问题
总结的原因: 1.删除文件文件后没有清空回收站; 2.删除的文件不在系统分区,在其他分区上; 3.删除的文件被保留在了/tmp分区下,而/tmp分区不是独立的分区,是在根分区/的基础上划分出来的分区; ...
- WAMP中修改mysql默认空密码
WAMP中如何修改mysql默认空密码 WAMP安装好后,mysql教程密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作.首先,通过WAMP打开mysql控制台.提 ...
- python学习的一些感悟
首先声明,这里用到的库是在coursera上学习时,老师建立的一个库 #timer import simplegui import random # global state message = &q ...
- 应用Oracle(用户创建和授权)
使用oracle命令创建用户,并授权. 系统管理员身份登录 cmd中, sqlplus / as sysdba 若登录失败,则 sqlplus system/[数据库创建时指定密码] as sysdb ...
- 求助:对话框下OnInitDialog中使用SetTimer无效
原文地址:http://www.w3c.com.cn/%E6%B1%82%E5%8A%A9%EF%BC%9A%E5%AF%B9%E8%AF%9D%E6%A1%86%E4%B8%8Boninitdial ...
- 开源java
http://code.google.com/p/nullpomino/source/checkout http://www.open-open.com/open254058.htm http://w ...
- X-Plosives
uvaLive 3644:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pa ...