前言:《深入理解JVM虚拟机》是JAVA的经典著作之一,因为内容更偏向底层,所以之前一直没有好好的阅读过。最近因为刚好有空,又有了新目标。所以打算和《构架师的12项修炼》一起看,这样荤素搭配,吃饭不累~

序:

1.如果开发人员不了解虚拟机的一些技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。

第一部分:走近JAVA:

1.虚拟机发展历史

2.自己编译JDK,断点调试运行程序

第二部分:自动内存管理机制

1.程序计数器:字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令(debug时也是靠它)

2.每个线程都只会执一条线程中的指令,每条线程都需要有一个独立的程序计数器,各条线程之间的计数器互不影响,独立储存,我们称这类内存区域为“线程私有”的内存。

3.如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指定的地址;如果是native方法,则计数器值为空(undefined)。此内存区域是唯一一个没有内存不够情况的区域。

4.java中的“栈”,一般指的就是JVM中的Java虚拟机栈,或者说是虚拟机栈中局部变量表部分。每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于储存几部变量表、操作数栈、动态链接、方法出口等信息

5.局部变量表所需的内存空间在编译期间完成分配,其中64位长度的long和double类型的数据会占用2个局部变量空间(Slot),其余的数据类型只占用一个。

6.如果现场请求的栈深度大于虚拟机所允许的深度,将抛出stack over flow error 异常(递归调用场景),如果虚拟机栈可以动态扩展(Map),如果扩展时无法申请到足够的内存,就会抛出out of memory error异常

7.本地方法栈与虚拟机栈的作用是非常相似的,区别是一个执行Java方法,一个执行本地native方法。本地方法栈并没有规定的数据结构和使用语言,由具体的虚拟机自由实现。同样会抛出内存溢出和内存不足的异常

8.Java堆(Heap)是Java虚拟机所管理的内存中最大的一块。所有的实例和数组都在它上面分配(随着优化技术的提升,这句话并不绝对了)

9.Java堆可以是物理上不连续的内存空间,也可以扩展。但如果超过上限,还是会报out of memory error。

10.方法区,被当做堆的一个逻辑部分。用来储存虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。不同的虚拟机有不同的实现

11.

《深入理解JVM虚拟机》读书笔记的更多相关文章

  1. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  2. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  3. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  4. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  10. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. 洛谷 P1010 幂次方

    做了好久,递归拆吧 #include<iostream>#include<cstdio>#include<cmath>using namespace std;int ...

  2. MySQL5.7 的新特点

    1.安全性 MySQL 5.7 的目标是成为发布以来最安全的 MySQL 服务器,其在 SSL/TLS 和全面安全开发方面有一些重要的改变. mysql.user表结构升级 MySQL5.7用户表my ...

  3. Tensorflow学习笔记02-Session,Variable,placeholder

    Session会话控制 使用tensorflow创建两个矩阵,并使其相乘 matrix1=tf.constant([[3,3]]) matrix2=tf.constant([[2], [2]]) pr ...

  4. Centos7部署tornado项目

    今天帮一个学生解决tornado的部署问题,在此记录了这其中的过程,其中的tornado项目更换为demo示例. 开发环境: 本地开发环境:Win10 + Python3.5.4 + PyCharm ...

  5. P2709 小B的询问(莫队)

    P2709 小B的询问 莫队模板 资磁离线询问 维护两个跳来跳去的指针 先分块,蓝后询问按块排序. 蓝后每次指针左右横跳更新答案 #include<iostream> #include&l ...

  6. gnats配置文件

    尽管NATS可以无配置的运行,但也可以使用配置文件配置NATS服务器 1. 配置项包括 客户端监听器端口 Client listening port HTTP监听器端口 HTTP monitoring ...

  7. 程序连接oracle数据库问题Cannot create PoolableConnectionFactory ...

    报错: [ERROR] -- :: com.ipi.caee.InitServlet - 初始化数据加载异常 org.springframework.transaction.CannotCreateT ...

  8. 在eclipse中, 如何快速输入(快捷键)System.out.println();

    1.快速输入(快捷键)System.out.println(); 首先输入sysout或syso,然后ALT+/ System.out.println(); 2.快速输入(快捷键)System.err ...

  9. [c/c++] programming之路(4)、常量和变量

    一.打开多个程序(温习) #include<stdio.h> #include<stdlib.h> void main(){ ; ]; scanf("%d" ...

  10. phpstorm官方教程

    https://confluence.jetbrains.com/pages/viewpage.action?pageId=15801728