虚拟机栈即是程序运行时的单位,而堆是数据存储的单位.换句话说,栈解决的是程序运行的问题,即程序如何执行,如何处理数据,而堆是解决数据的存储问题,数据存在哪,放在哪 虚拟机栈细节如下图所示,其中当前栈帧中包含 局部变量表.操作数栈.动态链接.本地返回值.另外对于栈来说,每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个栈帧,栈帧则对应着一次次的java方法调用.栈主管java程序的运行,保存方法的局部变量(8种基本数据类型.对象的引用地址).部分结果.参与方法的调用和返回 栈的特点 栈是一种快…
2.虚拟机栈 定义:虚拟机栈(Java Virtual Machine Stacks)就是每个线程运行需要的内存空间,栈由一个一个的栈帧(Frame)组成,栈帧就是每个方法运行时需要的内存(方法的参数.局部变量.返回地址) 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法 问题分析 垃圾回收是否涉及栈内存?不涉及 栈内存分配越大越好吗?不是,设置大一点只不过是增加了递归调用的效率 方法内的局部变量是否线程安全? 如果方法内局部变量没有逃离方法的作用范围,它就是线程安全的 如果局部变量引用…
Java运行时内存区域 Java虚拟机在运行Java程序的时候会将它所管理的内存区域划分为多个不同的区域.每个区域都有自己的用途,创建以及销毁的时间.有的随着虚拟机的启动而存在,有的则是依赖用户线程来启动和销毁. 程序计数器 程序计数器是一块很小的区域,可以看做是用来表示线程所执行到字节码的某一行的行号指示器. 在Java虚拟机中,多线程是线程之间轮流切换并分配处理器的执行时间来实现的,为了线程切换之后能够继续回到之前的代码行继续执行,所以每个线程都有一个“线程私有”的程序计数器. 如果线程正在…
第二章:Java内存区域和内存溢出异常 2.2运行时数据区域 运行时数据区分为方法区,堆,虚拟机栈,本地方法栈,程序计数器 方法区和堆是线程共享的区域 虚拟机栈,本地方法栈,程序计数器是数据隔离的数据区 2.2.,程序计数器,即PC,本质是一块较小的内存区域.可以看做当前线程所执行的字节码的行号指令器 有了它可以实现字节码指令,分支,循环.跳转.异常处理,线程恢复 每个线程有一个单独的PC,各个线程之间不互相影响,独立存储 如果执行的方法是java方法,计数器记录的是正在执行的虚拟机字节码指令的…
Java虚拟机在执行Java程序时,会把它管理的内存划分为若干个不同的数据区.这些区域有不同的特性,起不同的作用.它们有各自的创建时间,销毁时间.有的区域随着进程的启动而创建,随着进程结束而销毁,有的则始终贯穿虚拟机整个生命周期. Java虚拟机运行时内存区域主要分为七部分,分别是:程序计数器,Java虚拟机栈,本地方法栈,方法区,Java堆,运行时常量池,直接内存. 如上图所示(图片来源于网络): 蓝色区域包裹的部分为运行时几个数据区域: 白色的部分为线程私有的,既随着线程的启动而创建.每个线…
1.几个计算机的概念 为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念. 1.计算机存储单位 从小到大依次为位Bit.字节Byte.千字节KB.兆M.千兆GB.TB,相邻单位之间都是1024倍,1024为2的10次方,即: 1Byte = 8bit 1K = 1024Byte 1M = 1024K 1G = 1024M 1T = 1024G 2.计算机存储元件 寄存器:中央处理器CPU的一部分,是计算机中读写速度最快的存储元件,但是容量很少 内存:属于独立的一个…
1.Java虚拟机栈(Java Virtual Machine Stacks) 线程私有,它的生命周期与线程相同.描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表. 操作数栈.动态链接.方法出口等信息.每一个方法从调用直至执行完成的过程,对应着一个栈帧在虚拟机中入栈到出栈的过程. 有人会把Java内存区分为堆内存(Heap)和栈内存(Stack),这种分发太过粗糙,Java内存区域的划分实际上远比这个要复杂很多, 这种划分只是说…
身为一个java程序员如果只会使用而不知原理称其为初级java程序员,知晓原理而升中级.融会贯通则为高级 作为有一个有技术追求的人,应当利用业余时间及零碎时间了解原理 近期在看深入理解java虚拟机 第二版(基于jdk1.7)所以想写一些观后心得,整理一些比较重点的内容,也加强自己对重点内容的记忆! 以下默认虚拟机为hotsport虚拟机 一.jvm内存模型 ① 程序计数器: 程序计数器为每个线程私有 作用可以理解为在虚拟机解析字节码时记录当前字节码的行号 占用的内存较小 是唯一一个不会发生内存…
本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章将同步到我的个人博客: www.how2playlife.com 本文是微信公众号[Java技术江湖]的<深入理解JVM虚拟机>其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,…
虚拟机栈的背景 由于跨平台性的设计,java的指令都是根据栈来设计的.不同平台CPU架构不同,所以不能设计为基于寄存器的. 根据栈设计的优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令. 内存中的堆与栈 栈是运行时的单位,而堆是存储的单位1.栈解决程序的运行问题,即程序如何执行,或者说如何处理数据.堆解决的是数据存储的问题,即数据怎么放.放在哪儿. 2.一般来讲,对象主要都是放在堆空间的,是运行时数据区比较大的一块 3.栈空间存放 基本数据类型的局部变量,以及…