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


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. 20、android解决方案(转载)

    目录: 1.广告 2.推送 3.云 4.统计 5.后端存储 6.地图 7.测试 8.托管 9.支付 10.音视频 11.社会化分享 12.存储 13.自动更新 14.轻开发 15.安全 16.图像 1 ...

  2. BZOJ2457 BeiJing2011 双端队列

    [问题描述] Sherry现在碰到了一个棘手的问题,有N个整数需要排序.  Sherry手头能用的工具就是若干个双端队列.        她需要依次处理这N个数,对于每个数,Sherry能做以下两件事 ...

  3. 【BZOJ】【1855】【SCOI2010】/【HDOJ】【3401】股票交易

    DP/单调队列优化 题解:http://www.cnblogs.com/jianglangcaijin/p/3799736.html 令f[i][j]表示第 i 天结束后,手里剩下 j 股的最大利润, ...

  4. JAVA 对象数组,加载图片实例 分类: Java Game 2014-08-14 16:57 80人阅读 评论(0) 收藏

    主函数: package com.mywork; import java.awt.Color; import java.awt.Image; import javax.swing.ImageIcon; ...

  5. 深入理解python之self

    首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的.self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数. self名称不是必须的,在python中self ...

  6. Asp.net的服务器推技术 (Server Push)

    在以往的和服务器端通信技术中,我们多数使用的是AJAX轮询式访问,也就是在Javascript中控制时间间隔,然后每隔一段时间就访问一次服务器,然后获得数据或通知.但是这种轮询方式的访问有90%是在做 ...

  7. FIN_WAIT1 能持续多久?你知道吗

    FIN_WAIT1 能持续多久?你知道吗 2016-01-12 运维帮 原文:http://blogread.cn/it/article/7215?f=wb&luicode=10000359 ...

  8. Python中编码问题?

    一.键盘输入 raw_input('请输入:'.decode('utf-8').encode('gbk'))raw_input(unicode('请输入:','utf-8').encode('gbk' ...

  9. 【hadoop】有参考价值的博客整理

    好文章的网址: hadoop shuffle机制中针对中间数据的排序过程详解(源代码级) Hadoop mapreduce原理学习 与 Hadoop 对比,如何看待 Spark 技术? 深入理解Had ...

  10. Freebie: Material Design UI Kit

    点这里 Following the guidelines laid out by Google, this free UI kit has been designed so that you can ...