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. 在java代码中进行px与dip(dp)、px与sp单位值的转换

        其实都是以前保存的代码,最近发现自己的资料库很混乱,索性都整理成博客,方便以后自己要用的时候快速找到. DisplayUtil.java /** * 单位转换工具 * * @author ca ...

  2. Devstack: A copy of worked local.conf I&#39;m sharing with you.

    service_plugins = neutron.services.firewall.fwaas_plugin.FirewallPlugin [service_providers] service_ ...

  3. PPPOE 模拟环境搭建

    这段时间.包含我自己測试OTT盒子 PPPOE的时候比較痛苦.要不就是在别人的位置上測试.要不就是借用PPPOE的设备,认为还是自己搭建一个PPPOE真实拨号上网的环境多好! 可是坑爹的win7找不到 ...

  4. Kubernetes初步

    Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上.为容器化的应用提供资源调度.部署执行.服务发现.扩容缩容等整一套功能.本质上可看作是基于容器技术的mini-Pa ...

  5. jenkins 集成 redmine 账户验证的方案

    jenkins 集成 redmine 账户验证的方案 赖勇浩(http://laiyonghao.com) 动机 Jenkins 是最著名的持续集成工具,又因为它开源免费.插件众多,成为了许多团队做持 ...

  6. leetcode -day19 Convert Sorted List to Binary Search Tree

    1.  Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted ...

  7. android最近心得整理

    activity中OnAttachedWindow生命周期在OnResume之后,所以对长宽获取在推荐在OnAttachedWindow中进行. onDetachedWindow是在OnDestroy ...

  8. C++——STL中三种顺序容器的简要差别

    C++ STL 提供了3个顺序容器 :vector, deque, list Vector动态数组.支持高速訪问:list双向链表,支持高速插入和删除. vector 中的元素是顺序存放的.所以随机訪 ...

  9. Jquery 对话框确认

    $("#aa").click(function(){ if(confirm("是否继续")){ $(#aa).fadeOut(500); } })

  10. SSH协议详解(转)

    转发的http://blog.csdn.net/macrossdzh/article/details/5691924 很透彻啊,学习了 一.什么是SSH SSH是英文Secure Shell的简写形式 ...