分为:方法区 ,堆 ,栈 ,本地栈 ,程序计数器


1.程序计数器  

    保存当前线程执行的字节码行号指示器,解释器工作时,都是通过改变计数器的值来获取下一条程序指令,循环、异常、跳转、分支、线程恢复都要依赖程序计数器。

    对于多核系统(实际一个确定时刻,cpu只能执行线程中的一条指令),线程的恢复都是通过计数器来保存的,每个线程都有自己独立的计数器,称为“线程私有的”内存。

    如果线程正在执行的是java方法,则计数器记录的是当前线程的指令地址;如果执行的是本地方法,则保存的是空(undefined)。

    并且计数器是java虚拟机规范中唯一一个没有规定任何OutOfMemoryError的区域,也就是没有限制。

2. java栈

    与程序计数器相同,也是线程私有,生命周期与线程相同。
    每个方法在执行时,都会创建个栈帧,用于保存局部变量表、操作数栈、方法入口等信息。局部变量表用于保存基本数据类型、对象引用,局部变量表一特点是在编译期间内存大小是可知的,也就是固定的。

    局部变量表 是一组变量值存储空间,用于存放方法参数和方法内的局部变量

3. 本地方法栈
    
    与java栈非常相似,不同的是java栈是为执行java方法服务的,本地方法栈是为虚拟机执行本地方法服务的

4. java堆

    java堆是jvm中管理内存中最大的一块,是所有线程共享的,唯一的目的就是保存对象实例。java堆是gc回收的主要区域。java虚拟机规范规定,java堆可以处于不连续的物理内存空间,逻辑上是连续的。

5. 方法区

    与java 一样,是所有线程共享的,存储已被jvm 加载的类信息、常量、静态变量、即时编译器编译后的代码,即永久代(Permanent Generation) 。

    除了和java堆一样,不需要连续的物理内存空间,还可以选择不实现垃圾回收机制。虽然gc在这区域出现很少,但不代表不回收,回收目标主要是针对常量池和对类型的卸载。

6. 运行时常量池

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

  • 字面量:较接近java语言 的常量;
  • 符号引用:类和接口的全限定名;方法、字段的名称和描述符;
  • 符号引用:用一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义的定位到目标即可。符号引用与虚拟机实现的内存布局无关,引用的目标并不一定已经加载到内存中。
  • 直接引用:可以是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄。直接引用与虚拟机实现的内存布局相关,如果有了直接引用,那引用的目标必定已经在内存中存在。

--描述符:是用来描述字段的数据类型、方法的参数列表(个数、类型、顺序)和方法返回值;

7. 直接内存

    直接内存并不是jvm运行时数据区的一部分,也不是jvm规范中定义的内存区域。在jdk1.4中引入的NIO,引入了一种基于通道与缓冲区的IO方式,可以使用native函数库直接使用对外内存(系统内存),然后通过java堆里的DirectByteBuffer对象作为这块内存的引用进行操作。这样能提高性能,避免了java堆和native堆中来回复制数据。

jvm 内存整理 -----学习的更多相关文章

  1. JVM内存管理学习总结(一)

    I.JVM进程的生命周期 JVM实例的生命周期和java程序的生命周期保持一致,即一个新的程序启动则产生一个新的JVM进程实例,程序结束则JVM进程实例伴随着消失.那么程序启动和程序终止就是JVM实例 ...

  2. jvm内存模型学习心得

    昨天面试了两家,备受打击,问的多的就是jvm内存,然额真的是一头雾水.工作中用到的真是少之又少,面试还得问道, 今天恶补了下,在此作以下总结: jvm分为5部分 1.程序计数器 jvm支持多线程运行, ...

  3. java的线程安全、单例模式、JVM内存结构等知识学习和整理

    知其然,不知其所以然 !在技术的海洋里,前路漫漫,我一直在迷失着自我. 欢迎访问我的csdn博客,我们一同成长! "不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!" 博 ...

  4. java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项 ...

  5. 记一次线上事故的JVM内存学习

    今天线上的hadoop集群崩溃了,现象是namenode一直在GC,长时间无法正常服务.最后运维大神各种倒腾内存,GC稳定后,服务正常.虽说全程在打酱油,但是也跟着学习不少的东西. 第一个问题:为什么 ...

  6. 深入理解java虚拟机学习笔记(一)JVM内存模型

    上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要 ...

  7. JVM基础学习(一):JVM内存模型

    在Java进阶知识的学习中,JVM都是避不过去的一关,我个人对于JVM的理解其实就是相当于在操作系统的外层再加了一层中间层,从来屏蔽了具体硬件之间的不同实现,使得Java实现了最重要的特性:一次编译, ...

  8. Jvm 内存浅析 及 GC个人学习总结

    从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...

  9. 【JVM学习笔记一】JVM内存分布

    Overview 学习JVM首先需要了解一下JVM管理的内存是如何分布的,在看了<深入理解Java虚拟机>和一些博文之后,我准备自己记录一下学习的过程. 下图是JVM中运行时数据区的大致示 ...

随机推荐

  1. Entity Framework 学习之--Ling to entity实现分页

    最近用MVC做的一个项目涉及到分页,中间用了entity framework来查数据库,不用直接写sql语句,方便了很多. 一般分页的思路是获得两个变量的值: 1.一共有多少条记录 totalCoun ...

  2. MySQL高可用读写分离方案预研

    目前公司有需求做MySQL高可用读写分离,网上搜集了不少方案,都不尽人意,下面是我结合现有组件拼凑的实现方案,亲测已满足要求,希望各位多提建议 :) 一.    网上方案整理(搜集地址不详...) 1 ...

  3. Netsharp快速入门(之4) 基础档案(之C 实体建模 计量单位、商品、往来单位)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 3.3.2   基础档案建模 1.在基础档案项目,右击,选择新建包, 2.录入包的名称,录入名称.完成后点确定 3.3.2.1 计量 ...

  4. 博文&零散信息阅读

    关于培养方案: 全国一线高校.网易云课堂和我院培养计划的区别主要体现在: 基础课上,我院删去了物理课程的必修要求. 专业课上,删去了汇编语言.编译原理.信息安全技术等学科的必修要求. 专业选修课上,我 ...

  5. 【LCA】CodeForce #326 Div.2 E:Duff in the Army

    C. Duff in the Army Recently Duff has been a soldier in the army. Malek is her commander. Their coun ...

  6. 百度Hi之CSRF蠕虫攻击

    漏洞起因:百度是国内最大的中文搜索引擎.同时百度也提供了百度空间.百度贴吧等BLOG社区服务,拥有海量的用户群,号称全球最大中文社区. 80sec发现过百度产品一系列的安全漏洞,其中一些问题得到了有效 ...

  7. Firefly卡牌手游《暗黑世界V1.5》服务器端源码+GM管理后台源码

    http://www.9miao.com/content-6-304.html Firefly卡牌手游<暗黑世界V1.5>服务器端源码+GM管理后台源码 关于<暗黑世界V1.5> ...

  8. Sqli-labs less 61

    Less-61 此处对于id处理还是有点奇葩的,第一次遇到利用两层括号的.(可能我头发比较长,见识短了).形式和上述是一样的 payload: http://127.0.0.1/sqli-labs/L ...

  9. MySQL 5.6 和 MariaDB-10.0 的性能比较测试

    MySQL 5.6 和 MariaDB-10.0 的性能比较测试 时间 2013-02-14 10:11:34  开源中国 原文  http://www.oschina.net/question/12 ...

  10. Selenium获取input输入框中值的三种方法

    第一种用jQuery的val方法: js = "return $('input').val();" driver.execute_script(js) 第二种用jQuery的att ...