JVM(二)JVM的结构】的更多相关文章

栈内存是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表.操作数栈.动态链接.返回出口等信息.每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程.栈帧(Frame)是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接(Dynamic Linking).方法返回值和异常分派(Dispatch Exception).栈帧随着方法调用而创建,随着方法结束而销毁——无论方法是正常完成还是异常完成(抛…
前言:        我们在运行程序时,有时会碰到内存溢出(OutOfMemoryError)的问题,为了解决这种问题,我们有必要了解JVM的内存结构和垃圾回收机制. 正文: 1.JVM堆内存结构         JVM主要管理两种类型的内存,堆内存和非堆内存.         "java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此分配,堆是java虚拟机启动时创建的",对内存就是代码可及的地方.        "java虚拟机除堆外的内存称为非堆内存&…
JVM基本结构 一 JVM基本结构示意图 二 JVM结构详解 一 程序计数器 程序计数器是一块较小的内存空间,它是当前线程所执行的字节码的行号指示器,如果线程执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果是一个Native方法,则这个计数器的值为空(Undefined). 由于Java虚拟机的多线程是通过线程轮流切换并分配处理器的执行时间来实现的,在任何一个确定的时刻,一个处理器都会执行一条线程中的指令,因此,为了线程切换后能恢复到正确的执行位置,每条线程都需…
目录 一.引言 1.什么是JVM? 2.学习JVM有什么用 3.常见的JVM 4.学习路线 二.内存结构 1. 程序计数器 1.1 定义 1.2作用 2. 虚拟机栈 2.1定义 2.2栈内存溢出 2.3线程运行诊断 3. 本地方法栈 4. 堆 4.1定义 4.2堆内存溢出 5. 方法区 5.1方法区 5.2组成 5.3方法区内存溢出 5.4 运行时常量池 5.5 StringTable 5.6 StringTable的特性 5.7 StringTable 位置 5.8 StringTable 垃…
JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑. 语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用.通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会.…
JVM(七):JVM内存结构 在前几节的文章我们多次讲到 Class 对象需要分配入 JVM 内存,并在 JVM 内存中执行 Java 代码,完成对象内存的分配.执行.回收等操作,因此,如今让我们来走入 JVM,看看 JVM 中的内存结构是如何构造的,下面就让我们一探究竟吧. 内存划分 在本小节中,我们以<Java 虚拟机规范>中的要求,并以当前主流虚拟机 Hotspot VM 为例,详细讲述内存区域中各个模块的划分,了解其各自的用途以及其为何如何划分等. 首先让我们来看一下 Java 虚拟机…
JVM内存模型和Java内存模型都是面试的热点问题,名字看感觉都差不多,实际上他们之间差别还是挺大的. 通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关@mikechen. 什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一个虚构出来的计算机,有着自己完善的硬件架构,如处理器.堆栈等. 为什么需要JVM? Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚…
  1.JVM内存模型       JVM运行时内存=共享内存区+线程内存区 1).共享内存区       共享内存区=持久带+堆       持久带=方法区+其他       堆=Old Space+Young Space       Young Space=Eden+S0+S1 (1)持久带       JVM用持久带(Permanent Space)实现方法区,主要存放所有已加载的类信息,方法信息,常量池等等.可通过-XX:PermSize和-XX:MaxPermSize来指定持久带初始化…
原文转载自:http://my.oschina.net/sunchp/blog/369707 1.JVM内存模型 JVM运行时内存=共享内存区+线程内存区 1).共享内存区 共享内存区=持久带+堆 持久带=方法区+其他 堆=Old Space+Young Space Young Space=Eden+S0+S1 (1)持久带 JVM用持久带(Permanent Space)实现方法区,主要存放所有已加载的类信息,方法信息,常量池等等. 可通过-XX:PermSize和-XX:MaxPermSiz…
选择JVM部署模型    JVM部署模型的选择总体来说就是决定应用是部署在单个JVM实例还是多个JVM实例上(这里简单举例说明一下JVM实例,比如:我们常用eclipse开发,启动一个eclipse就是启动了一个JVM实例,然后在JVM中运行一个main程序,又会启动一个JVM实例,两个JVM实例是隔离开的).哪一个是最适合你的应用的呢?这个是前面说到系统需求和潜在规则来决定的.比如说:假如你要部署您的应用在一个64位的机器上面,可以支持更大Java堆,如果应用依赖第三方的本地代码组件,而且这个…