watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWl3dXpoaWxpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="700" height="400" alt="">

JVM体系主要包括下面部分:

类载入器、运行引擎,内存区。本地方法调用。

内存区一般即指执行时数据区。以下概括下各部分存储什么内容和作用:

程序计数器(PC寄存器):

线程私有。

是一块较小的内存,可看作是线程所运行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条须要运行的字节码指令,分支、循环跳转、异常处理、线程恢复等基础功能都须要依赖这个计数器来完毕。

每一个线程切换后能恢复到正确的运行位置。每条线程都有独立的程序计数器,各线程私有。入正在运行Java方法,记录正在运行的虚拟机字节码指令的地址。假设正运行Native方法,为空。没有规定不论什么OutOfMemoryError情况的区域。

Java虚拟机栈:

线程私有。

描写叙述Java方法运行的内存模型:每一个方法在运行时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至运行完毕的过程。就相应一个栈帧在虚拟机栈中入栈到出栈的过程。就是我们常分的“堆”和“栈”中的栈,或者说是局部变量表部分。

局部变量表存放编译器可知的基本数据类型和引用类型(不是对象本身,指向对象的起始地址的引用指针或者该对象的句柄)。局部变量表所需内存空间在编译期间完毕分配。当进入一个方法时。这种方法须要在栈中分配多大的局部变量空间是全然确定的。

本地方法栈:

与虚拟机栈作用相似,不同的是虚拟机栈为运行Java方法(字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。有的虚拟机入Sun Spot已将此部分与虚拟机栈合并。

Java堆:

线程共享。是Java虚拟机所管理的内存中最大的一块。在虚拟机启动时创建。唯一目的就是存放对象实例,差点儿全部对象实例都在分配内存。是垃圾收集器管理的主要区域。亦成为“GC堆”。

垃圾收集器基本都採用分代收集算法,所以,java堆还能够细分为:新生代和老年代;再细一点可分为Eden空间、From Survivor空间、To Survivor空间等。物理不连续,逻辑连续。

可固定大小也可扩展。

方法区:

线程共享。存储已被虚拟机载入的类信息、常量(final)、静态变量(static)、即时编译器编译后的代码等数据。JVM规范将其描写叙述为堆的一个逻辑部分。但却有个别名——非堆,就是为与Java堆区分开来。sun spot称之为永久代。

执行时常量池:

方法区的一部分。Class文件除了有类的版本号、字段、方法、接口等描写叙述信息外,另一项就是常量池。用于存放编译期生成的各种字面量和符号引用,这部分在类载入后进入方法区的执行时常量池中存放。

一般来说,除了Class文件里描写叙述的符号引用外,还会把翻译出来的直接引用也存储在执行时常量池中。

直接内存:

不属于是执行时数据区一部分,也不是JVM规范中定义的区域。

由于这部分内存被频繁使用,所以也要关注。在JDK1.4引入NIO类,引入了基于通道(Channel)与缓冲区(Buffer)的I/O方式。它能够使用Native函数库直接分配堆外内存。然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。

这样能在一些场景中显著提高性能,因此避免了在Java堆和Native堆中来回复制数据。

版权声明:本文博主原创文章。博客,未经同意不得转载。

【Java 之 JVM】Java内存结构概述的更多相关文章

  1. 巩固java(二)----JVM堆内存结构及垃圾回收机制

    前言:        我们在运行程序时,有时会碰到内存溢出(OutOfMemoryError)的问题,为了解决这种问题,我们有必要了解JVM的内存结构和垃圾回收机制. 正文: 1.JVM堆内存结构   ...

  2. Java虚拟机JVM学习01 流程概述

    Java虚拟机JVM学习01 流程概述 Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这 ...

  3. 如何设置Java虚拟机JVM启动内存参数

    Tomcat默认的Java虚拟机JVM启动内存参数大约只有64MB或者128MB,非常小,远远没有利用现在服务器的强大内存,所以要设置Java虚拟机JVM启动内存参数.具体设置方法为: Tomcat修 ...

  4. java中JVM虚拟机内存模型详细说明

    java中JVM虚拟机内存模型详细说明 2012-12-12 18:36:03|  分类: JAVA |  标签:java  jvm  堆内存  虚拟机  |举报|字号 订阅     JVM的内部结构 ...

  5. JVM的内存结构,JVM的回收机制

    内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收 ...

  6. JVM 垃圾回收机制和常见算法和 JVM 的内存结构和内存分配(面试题)

    一.JVM 垃圾回收机制和常见算法 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同.GC(Garbage Collector)在回收对象前首先必 ...

  7. JVM之内存结构详解

    对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相 ...

  8. JVM的内存结构以及性能调优

    JVM的内存结构以及性能调优 发布时间: 2017-11-22 阅读数: 16675 JVM的内存结构以及性能调优1:JVM的结构主要包括三部分,堆,栈,非堆内存(方法区,驻留字符串)堆上面存储的是引 ...

  9. JVM的基本结构和JVM的内存结构

    这里概要介绍一下JVM在启动后,作为操作系统的一个进程的基本结构,以及从操作系统角度看,JVM如何管理它从操作系统里申请来的内存的,也就是JVM的内存结构或者叫JVM内存模型. 1.JVM的基本结构 ...

  10. JVM:内存结构

    JVM:内存结构 说明:这是看了 bilibili 上 黑马程序员 的课程 JVM完整教程 后做的笔记 内容 程序计数器 虚拟机栈 本地方法栈 堆 方法区 直接内存 1. 程序计数器 1.1 定义 P ...

随机推荐

  1. 2)JS动态生成HTML元素的爬取

    2)JS动态生成HTML元素的爬取 import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.W ...

  2. svn rm --keep-local ./QueryParser_kill.logs

    svn rm --keep-local ./QueryParser_kill.logs

  3. 《SAS编程和数据挖掘商业案例》第14部分学习笔记

    继续<SAS编程与数据挖掘商业案例>学习笔记系列,本次重点:经常使用全程语句 所谓全程语句.是指能够用在不论什么地方的sas语句,既能够用在data数据步语句里面,也能够用在proc过程步 ...

  4. 彻底理解Javascript原型继承

    彻底理解Javascript原型继承 之前写过一篇Javascript继承主题的文章,这篇文章作为一篇读书笔记,分析的不够深入. 本文试图进一步思考,争取彻底理解Javascript继承原理 实例成员 ...

  5. iOS 通讯录-获取联系人属性

    内容均来自关东升老师的ios开发指南 上一篇写了联系人框架的一些必须知道的知识 如今写一下读取联系人数据相关操作 要读取通讯录数据库 须要 创建通讯录对象 查询获取数据(全部或者部分) 获取通讯录某一 ...

  6. 数据结构 《18》----RMQ 与 LCA 的等价性 (一)

    前言     RMQ: 数组 a0, a1, a2,..., an-1, 中求随意区间 a[i+1], a[i+2], ..., a[i+k] 的最小值     LCA: 求二叉树中两个节点的最低公共 ...

  7. STM32F103 TIM1输出PWM设置

    //TIM1 分频 #define TIM1_DIV1 (1-1) #define TIM1_DIV2 (2-1) #define TIM1_DIV4 (4-1) #define TIM1_DIV8 ...

  8. 哈希表之bkdrhash算法解析及扩展

    BKDRHASH是一种字符哈希算法,像BKDRHash,APHash.DJBHash,JSHash,RSHash.SDBMHash.PJWHash.ELFHash等等,这些都是比較经典的,通过http ...

  9. vs2012 它已停止工作 - 解决方案

    最近学习<Windows多媒体编程>本课程, 蛋疼, 学校原来是MFC... 然后安装vs2012.   后来又在几个插件.. 在这个问题. 开业,提示 vs2012 它已停止工作. wa ...

  10. Jquery 时间格式化

    var TimeObjectUtil;/** * @title 时间工具类 * @note 本类一律违规验证返回false * @author {boonyachengdu@gmail.com} * ...