jvm内存大致可以分为六大块:

堆,虚拟机主要内存,可以形象的说,堆是对象的存储库,几乎所有的对象实例和数组都在此分配内存,当然也死于此,jvm垃圾回收机制(简称GC)主要处理的就是这个地方。它被所有线程共享,没错,这可能造成一些问题,此处留到讨论对象时再说。堆的存储空间在物理上不要求一定连续,实际上它只要让我们看起来是连续的就可以了(虚拟化内存),一般情况下,堆的大小是可以扩展的,当然如果计算机内存满了,导致堆无可申请的话,对象创建就失败了,那么就会抛出outofmemeryError异常。

方法区,顾名思义,它就是用来存储方法的(当然还有别的=。=),它和堆一样被线程共享,负责存储加载的类信息、常量、静态变量、即时编译器编译后的代码等数据(注意,JAVA代码通常是即时编译的,即用到哪里就编译哪里,用的少的就擦掉,用的多的就留下来)。这里同样需要GC的回收和处理,其实通常需要回收的仅仅是常量池而已(至于类信息吗、、、),方法区和堆一样,无可扩展时就会抛出outofmemeryError异常。

本地方法栈,线程私有,这个地方如果不深入剖析的话,很难理解这是干什么用的,因此目前俺只知道它用来存储本地的方法(只有个模糊的感念凭感觉这像是干什么的干什么的、、=。=),区别于JAVA方法,它是对非JAVA语言的一种外部接口。还有它是栈,是栈就可能溢出。

虚拟机栈,每个线程有一个独立的虚拟机栈,互不影响,随线程的出生而出生死亡而死亡,虚拟机栈以帧为单位,每当执行一个方法时,都会在栈顶创建一个栈帧,用于存储局部变量(方法内的)、方法出口等信息,方法的调用和完成的过程,就是栈帧入栈出栈的过程。

程序计数器,这个很重要,每个线程/方法执行到哪了,在哪休眠,在哪恢复,都需要程序计数器记录,由于CPU每个核心同时只能执行一个线程的指令,所以这种记录是非常必要的,因此它线程私有。

读书笔记jvm探秘之一:内存概况的更多相关文章

  1. 读书笔记jvm探秘之二: 对象创建

    对象是面向对象设计语言无法回避的东西,可见其重要性,JAVA的对象相较于C++来说,不算很复杂,但是我们看到一句话背后往往有很多东西值得探讨(NEW关键字). 对象如何被创建? 首先一句简单的NEW语 ...

  2. JVM探秘:内存溢出

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 在 Java 虚拟机内存区域中,除了程序计数器外,其他几个内存区域都可能会发生OutO ...

  3. JVM探秘:内存分配与回收策略

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 内存分配一般关注的是对象在堆上分配的情况,对象主要分配在新生代的Eden区中,如果启用 ...

  4. JVM探秘1--JVM内存运行时区域划分

    Java程序员一般不需要太关注内存,因为操作内存的权力都交给了Java虚拟机,但是Java程序员必须需要了解JVM是如何使用内存的,否则一旦内存出现泄漏或事溢出的话,就会一筹莫展不知道从哪去入手排查问 ...

  5. JVM读书笔记之垃圾收集与内存分配

    1 概述 说起垃圾收集( Garbage Collection , GC ) ,大部分人都把这项技术当做 Java 语言的伴生产物.事实上, GC 的历史远远比 Java 久远,1960 年诞生于 M ...

  6. 读书笔记-JVM

    局部变量表(虚拟机栈中的一部分)在编译期完成分配,运行期不会再改变大小: 每个方法对应一个栈帧(存储局部变量表.操作数栈.动态链接.方法出口等),栈帧被存储到虚拟机栈中,每个线程对应一个虚拟机栈,方法 ...

  7. 《深入理解java虚拟机》读书笔记-第二章Java内存区域和内存溢出异常

    java1.7和java8的jvm存在差异,本文先按照<深入理解java虚拟机>的讲解内容总结,并将java8的改变作为附录放在文末 一丶运行时数据区域 ​ 图:java虚拟机运行时数据区 ...

  8. 《深入理解Java虚拟机》读书笔记-垃圾收集器与内存分配策略

    在堆里存放着java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前需要知道哪些对象还存活,哪些对象已经死去.那怎么样去判断对象是否存活呢? 一.判断对象是否存活算法 1.引用计数法 实现思路:给 ...

  9. 《JavaScript 高级程序设计》读书笔记四 变量 作用域 内存

    一   变量(基本类型和引用类型) a.基本类型保存值,保存在栈内存,引用类型保存指针,保存在堆内存: b.所有函数的参数都是按值进行传递的,不管参数是何种类型: c.检测类型 typeof     ...

随机推荐

  1. Ashx登录

    <script type="text/javascript"> window.onload = function () { var url = document.get ...

  2. MPAndroidChart开源图表库---折线图

    项目地址:点击打开,原文参考地址:点击打开 1. 将mpandroidchartlibrary-2-0-8.jar包copy到项目的libs中 2. 定义xml文件 <?xml version= ...

  3. 面试(Java之IO与NIO)

    一.概念 NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多.在Java API中提供了两套N ...

  4. Spring Cloud(1):微服务简介

    架构的演进: 1.十年前:用户->单一服务器->单一数据库(支持十万级用户) 2.五年前:用户->负载均衡器->多台服务器->缓存集群->主从数据库(支持百万级用户 ...

  5. windows 下设置MTU数值

    输入:netsh interface ipv4 show subinterfaces 查询到目前系统的MTU值.再分别输入一行按一次回车键. netsh interface ipv4 set subi ...

  6. 【BZOJ4300】绝世好题(位运算水题)

    点此看题面 大致题意: 给你一个序列\(a\),让你求出最长的一个子序列\(b\)满足\(b_i\&b_{i-1}!=0\). 位运算+\(DP\) 考虑设\(f_i\)表示以第\(i\)个数 ...

  7. 【转】IOS开发网络篇之──ASIHTTPRequest详解

    ASIHTTPRequest 详解, http 请求终结者 版权归旺财勇士所有〜转载需声名〜 原贴地地址:http://wiki.magiche.net/pages/viewpage.action?p ...

  8. Matlab将多幅图片保存为mat

    %% 储存某目录所有的图片 pt = 'd:\imgs\'; ext = '*.jpg'; dis = dir([pt ext]); nms = {dis.name}; for k = 1:lengt ...

  9. Python实现购物小程序

    一.需求 1.登录 { ‘xxx1’:{'passwd':'123','role':1,'moeny':10000,"carts":['mac']}, 'xxx1':{'passw ...

  10. CUDA的软件体系

    CUDA的软件堆栈由以下三层构成:CUDA Library.CUDA runtime API.CUDA driver API,如图所示,CUDA的核心是CUDA C语言,它包含对C语言的最小扩展集和一 ...