今天看JVM的过程中收获颇丰,但一想到这些学习心得将来可能被遗忘,便一阵恐慌,自觉得以后要开始坚持做读书笔记了。

操作系统层面的内存管理

物理内存是一切内存管理的基础,Java中使用的内存和应用程序的内存一样是从物理内存申请下来的内存。物理内存也就是寄存器,通过地址总线与CPU相连,通常情况下地址总线与寄存器有着相同的位数,同时也决定了处理器最大可寻址的地址空间。

为了提高物理内存的利用率而产生了虚拟内存,也就是逻辑上的内存。为了保证操作系统和应用程序的稳定性,运行在操作系统中的用户程序不能访问操作系统所使用的内存空间,内存空间因而被划分为了内核空间和用户空间。

内存的交互中总结为下图

Java中需要使用内存的组件

  • Java堆
    一旦分配完成,堆的大小就将固定,不能在内存不够时再向操作系统中重新申请,同事当内存空闲时也不能将多余的空间交还给操作系统。

  • 线程
    通常JVM为线程创建的堆栈在256KB~756KB之间。

  • 类和类加载器
    任何系统类或通过应用程序加载器加载的任何应用程序类都不能在运行时释放(存储在堆中,永久代)。换句话说,加载其实是一种I/O操作,生成的类字节码对象在堆中的方法区中,提供执行指令,提供运行时常量池,并且可以作为对象被操作。

  • NIO
    分配的是内核空间而不是用户空间上Java堆中的内存,可以避免从内核空间到Java堆上的切换操作,但是通常需要显示的调用System.gc()来释放NIO持有的内存。

  • JNI
    本机代码如C语言程序可以调用Java方法,也会增加Java运行时内核空间中的本机内存内存占用。

JVM内存结构

在Java虚拟机规范中将Java运行时数据划分为6种

  • PC寄存器数据

  • Java栈

  • 方法区
    方法区这个存储区域也属于Java堆中的一部分(永久区)

  • 本地方法区
    本地方法栈是为了JVM运行Native方法准备的空间,由于很多Native方法都是用C语言实现的,所以它通常又叫C栈。

  • 运行时常量池
    在用户空间Java堆上的方法区中。

操作系统的内存分配策略

  • 静态内存分配策略
    编译时计算存储空间需求,加载时一次性分配内存空间
    如:堆的创建

  • 栈式内存分配策略
    运行中进入一个模块时,在知道该模块所需的数据区大小时才能为其分配内存
    如:数组、malloc

  • 堆式内存分配策略
    当程序真正运行到相应代码时才会知道空间大小,并为其分配内存
    如:集合、创建对象

Java中的内存分配详解

  • Java内存分配给栈
    创建线程:堆式内存分配策略,创建线程栈
    激活方法:栈式内存分配策略,JVM根据操作栈大小创建栈帧,并在线程栈中压入该栈帧

  • Java堆中分配内存
    创建对象:堆式内存分配策略,JVM在堆上为该对象分配内存空间
    所有对象的存储空间都是在堆中分配的,但该对象的引用却是在栈帧中压入的

JVM内存回收策略

  • 静态内存分配和回收
    栈上的内存分配和回收(弹出栈帧)

  • 动态内存分配和回收
    堆中的内存分配和回收(垃圾回收)

这里分了动态和静态,其实我更喜欢用操作系统的栈式内存分配策略和堆式内存分配策略来解释

  • 垃圾回收
    JVM的垃圾回收关键在于整体的效率优化上,这里讲解了垃圾回收算法的发展和常见的内存问题,现在还看不懂

《深入分析Java Web技术内幕》读书笔记之JVM内存管理的更多相关文章

  1. JAVA Coder 的《深入分析Java Web 技术内幕》读书笔记

    本文基于<深入分析Java Web 技术内幕> <深入分析Java Web 技术内幕>,作者是 许令波,电子工业出版社.本文只是记录书本当中的精彩部分,作个人回顾和技术分享,请 ...

  2. 深入分析Java Web技术内幕(修订版)

    阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著   ISBN 978-7-121- ...

  3. Servlet工作原理解析 《深入分析java web 技术内幕》第九章

    参考关于servblet的相关文章 侧重概况:https://blog.csdn.net/levycc/article/details/50728921 ibm的相关:https://www.ibm. ...

  4. developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章

    developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章 深入理解 Session 与 Cookie Session 与 Cookie 不管是对 Java Web ...

  5. 《深入分析Java Web技术内幕》读书笔记 - 第1章 深入Web请求过程

    第1章 深入Web请求过程 1 1.1 B/S网络架构概述 2 基于统一的应用层协议HTTP来交互数据. 1.2 如何发起一个请求 4 HTTP连接本质是建立Socket连接.请求实现方式:工具包如H ...

  6. 深入分析Java Web技术内幕

    深入web请求过程 发起一个http请求的过程就是建立一个socket通信的过程 HTTPClient是一个开源的实现了http请求的工具包 深入分析java I/O的工作机制 深入分析java We ...

  7. 深入分析java web技术内幕目录一览

    Web请求过程 如何发起请求:browser,httpclient http解析:chrome ,cache Dns域名解析:域名缓存 cdn:负载,动态加速,回源 Java I/O I/0类库的基本 ...

  8. JVM内存管理 《深入分析java web 技术内幕》第八章

    8.1 物理内存与虚拟内存 物理内存RAM(随机存储器),寄存单元为寄存器,用于存储计算单元执行指令的中间结果. 连接处理器和RAM或者处理器和寄存器的是地址总线,这个地址的宽度影响了物理地址的索引范 ...

  9. java体系结构与工作方式 《深入分析java web 技术内幕》第七章

    java体系结构与工作方式 7.1 JVM体系结构 何谓JVM JVM(Java Virtual Machine) 通过模拟一个计算机来达到一个计算机所具有的计算功能 指令集:计算机所能识别的机器语言 ...

随机推荐

  1. PAT——1059. C语言竞赛

    C语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 0. 冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……).1. 排名为素数的学生将 ...

  2. HDU 3367 (伪森林,克鲁斯卡尔)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3367 Pseudoforest Time Limit: 10000/5000 MS (Java/Oth ...

  3. gdb调试时的问题Missing separate debuginfos, use: debuginfo-install glibc-XXX

    在CentOS6.4下使用gdb进行调试的时候, 使用bt(breaktrace)命令时,会弹出如下的提示: 头一天提示: Missing separate debuginfos, use: debu ...

  4. java 进销存 crm 客户管理 库存管理 商户管理 springmvc SSM 项目

    系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3  SSM ...

  5. 自己动手写一个简易对象关系映射,ORM(单例版和数据库池版)

    准备知识 DBUtils模块  <<-----重点 DBUtils是Python的一个用于实现数据库连接池的模块 此连接池有两种连接模式: DBUtils提供两种外部接口: Persist ...

  6. JDK1.8降到1.7技巧

    前言: 最近部署一个产品,该产品不支持JDK1.8,碰巧我的机器安装的是1.8,这就需要降到1.7才能部署启动成功.那么我也是不赞成卸载1.8来安装1.7,因为很多时候可能需要1.8和1.7来回切换. ...

  7. react中如何获取onclick事件调用元素的dom对象

    今天终于有时间写博客了, 前几天项目有个需求,我感觉用dom操作兄弟元素实现比较方便,但是前端用的react框架不能用jquery的$(this)获取当前元素,查了好多资料和尝试后写下总结: 在HTM ...

  8. MySQL的主从复制+双主模式

    MySQL的主从复制 部署环境: MySQL master 192.168.40.21 MySQL slave  192.168.40.22 思路: 当主MySQL上进行数据上的操作或者变化时,主My ...

  9. SVN(独立安装)-1.9.7 centos 6.5(64位)

    说明: 运行方式: 基于Apache的http.https网页访问形式: 基于svnserve的独立服务器模式. 数据存储方式: 在Berkeley DB数据库中存储数据: 使用普通的文件FSFS存储 ...

  10. 百度地图热力图--批量地址转换应用(基于百度api)

    需求:把外卖订餐地址做个用户分布热力图 思路分析:第一步去百度地图api开放平台找例子 http://lbsyun.baidu.com/jsdemo.htm#c1_15 首先从百度API的demo例子 ...