今天看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. DecimalFormat的使用

    DecimalFormat,四舍五入时需要设置RoundingMode 1.占位符0: 比实际数字的位数多,不足的地方用0补上. new DecimalFormat("00.00" ...

  2. Docker 常用命令——容器

    1.新建并启动容器 docker run [option] images [command][arg]    #根据镜像新建容器并运行.如果本地没有镜像则从docker hub上拉取. --name ...

  3. jQuery实现购物车计算价格功能的方法

    本文实例讲述了jQuery实现购物车计算价格功能的简易方法,做的比较简单,现分享给大家供大家参考.具体如下: 目的: <%@ page language="java" con ...

  4. c#将List转换成DataTable(采用Emit)

    前段时间通过网上查找,使用emit将Datatable,DataReader转换成List<T>了.这是从数据库到展示. 但是最近整理Hikari(我写的数据库连接池),发现c#里面数据库 ...

  5. C++练习 | 在递增序列中查找最后一个小于等于指定数的元素

    #include <iostream> using namespace std; int mid,l0; int solve(int a1[],int l,int r,int x) { & ...

  6. Ubuntu如何挂载U盘

    1. 以root用户登陆 2. 查看当前挂载 fdisk -l 一般情况未挂载的硬盘都在最后,这里是/dev/sdb1 3.新建一个目录来挂载硬盘 挂载到MNT/usb root@h-Default- ...

  7. Hadoop HA 高可用集群搭建

    一.首先配置集群信息 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 .tar.gz -C /usr/hadoop/ 2.进入/usr/hadoop/zo ...

  8. Keil MDK最新版 5.25介绍及下载地址

    看到Keil MDK又出新版咯,分享给大家 Keil MDK-ARM 5.25 uVision5开发工具下载地址:http://www.myir-tech.com/soft.asp?id=1140 K ...

  9. gi的安装和使用

    Git的安装 git是什么? git是一种版本控制器,更直白的说,团队开发的时候,管理代码使用的软件 Linux下的安装 yum install git Git的配置 在使用git之前,需要先进行配置 ...

  10. python 爬虫基础知识(继续补充)

    学了这么久爬虫,今天整理一下相关知识点,还会继续更新 HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法 ...