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. 2014年辛星解读Javascript之用DOM动态操纵HTML元�

    关于DOM,我们了解了能够用DOM操纵HTML的一些属性和样式,还能够为HTML元素绑定事件等等,那么接下来,我们将涉及到用DOM来动态的创建.删除HTML等一些操作,我的核心思路还是重实战,因此,代 ...

  2. Linux下SVN账户密码保存设置

    Linux下用SVN进行更新等操作时,总是提示输入用户名和密码,很不方便.因此搜了下解决办法,总结如下: 打开SVN配置文件: vim /home/<user>/.subversion/c ...

  3. MySQL命令行数据操作使用心得(总结版)

    Char 0~255 Varchar 0~65535 text 0~65535(只能保存字符) Longtext 0~4294967295(只能保存字符) CMD登陆mysql mysql -u ro ...

  4. Linux cp -a用法

    对于cp -a最主要的用法是在保留原文件属性的前提下复制文件.其实还有个很好的用法,如下: 大家知道linux下复制目录可以通过,cp -r dirname destdir 但是这样复制的目录属性会发 ...

  5. 深入理解java虚拟机系列(一):java内存区域与内存溢出异常

    文章主要是阅读<深入理解java虚拟机:JVM高级特性与最佳实践>第二章:Java内存区域与内存溢出异常 的一些笔记以及概括. 好了開始.假设有什么错误或者遗漏,欢迎指出. 一.概述 先上 ...

  6. Java开发环境的基本设置

    作为Java的刚開始学习的人,不知道其它的刚開始学习的人有没有和我一样的感受:用Java开发须要配置这么复杂 的环境.太难了.第一次配置时,一团混乱.Oracle监听服务打不开了,PLSql连接不上O ...

  7. Linux通过使用pdb简单调试python计划

    python自带的调试工具库:pdb # -*- coding:utf-8 -*- def func(num): s = num * 10 return s if __name__ == '__mai ...

  8. [Unity3D]Unity4全新的动画系统Mecanim

    Unity4.X添加一个新的动画系统,以取代原有的3.X旧的动画系统,全新的动画系统Mecanim是官方推荐,它使我们能够写更少的代码实现连续动画. 效果图 Unity3.X中动画系统播放动画 使用播 ...

  9. SQL Server :理解数据页结构

    原文:SQL Server :理解数据页结构 我们都很清楚SQL Server用8KB 的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行.也就是说,SQL Server 读取或 ...

  10. Windows Phone开发(14):数据模板

    原文:Windows Phone开发(14):数据模板 数据模板,如果你仅仅听到这个名词,你一定很迷惑,什么来的?用来干什么的?不急,亲,今天,我们一起来探索一下吧. 用白话文说,数据模板就是用来规范 ...