1.课程概要

(1)Java虚拟机和Java内存区域概述

(2)Java虚拟机栈和本地方法栈

(3)Java堆

(4)方法区和运行时常量池

(5)直接内存

2.Java虚拟机运行时数据区

运行时数据区的划分(5):

(1)Java虚拟机栈

(2)本地方法栈

(3)程序计数器

(4)Java堆

(5)方法区(包含运行时常量池)

程序计数器(Program counter Register)

1.是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器

2.如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;

如果正在执行的是Native方法,这个计数器值则为空

3.此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoreyError情况的区域

Java虚拟机栈和本地方法栈

Java虚拟机栈的概念和特征

(1)线程私有

(2)后进先出栈

(3)存储栈帧,支持java方法的调用、执行和退出

(4)可能出现OutOfMemoryError异常和StackOverflowError异常、

栈帧的概念和特征

1)Java虚拟机栈中存储的内容,它被用来存储数据和部分过程的数据结构,

同事也被用来处理动态连接,方法返回值和异常分派

2)一个完整的栈帧包含:局部变量表、操作数栈、动态连接信息、方法正常完成和

异常完成信息

局部变量表概念和特征

1)由若该个Slot组成,长度由编译期决定

2)单个Slot可以存储一个类型为boolean、byte、char、short、float、reference

和returnAddress 的数据,两个Slot可以存储一个类型为long或者double的数据

3)局部变量表用于方法间参数传递,以及方法执行过程中存放基础数据类型的值

和对象的引用

操作数栈的概念和特征

1)是一个后进先出栈,由若干个Entry组成,长度由编译期决定

2)单个Entry即可以存储一个Java虚拟机中国定义的任意数据类型的值,包括

long和double类型,但是存储long和double类型的Entry深度为2,其他类型的深度为1

3)在方法执行过程中,栈帧用于存储计算阐述和计算结果;在方法调用时,操作数栈用来准备调用方法的参数以及接收方法返回结果

本地方法栈的概念和特征

(1)线程私有

(2)作用是支撑Native方法的调用、执行和退出

(3)后进先出栈

(4)可能出现OutOfMemoryError异常和StackOverflowError异常

(5)有一些虚拟机(如HotSpot)将Java虚拟栈和本地方法栈合并实现

Java堆

Java堆的特征

1.给所有线程共享的内存区域

2.通常是Java虚拟机中最大的一块内存区域

3.作用是作为Java对象的主要存储区域

4.JVMS明确要求该区域需要实现自动内存管理,即常说的GC,但是不限制采用哪种算法和技术去实现

(新生代,老年代,永久代)分带算法

5.可能出现OutOfMemoryError异常

从栈到堆的关联过程

方法区(永久代)和运行时常量池

方法区的特点

1.全局共享

2.作用是存取Java类的结构信息(常量,静态变量,方法,字段等)

3.JVMS不要求该区域实现自动内存管理,但是商用Java虚拟机都能够自动管理该区域的内存

4.可能出现OutOfMemoryError

运行时常量池的特征(是方法区中的一部分)

1.全局共享

2.是方法区的一部分

3.作用是存取Java类文件常量池中的符号信息

4.可能出现OutOfMemoryError异常

HotSpot方法区实现的变迁

永久代与方法区

1.在JDK1.2~JDK6,HotSpot使用永久代实现方法区

2.在JDK7开始,HotSpot开始了移除永久代的计划

1)符号表被移动到Native Heap中

2)字符创常量和类的静态引用被移动到Java Heap中

3.在JDK8开始,永久代已经被元空间(Metaspace)所代替

直接内存

直接内存的概念和特征

1.并非JVMS定义的标准Java运行时内存区域

2.随JDK1.4中加入NIO被引入,目的是背面在Java堆和Native堆中来回复制数据带来的性能损耗

3.全局共享

4.能被自动管理,但是在检测手段上可能会有一些简陋

5.可能出现OutOfMemoryError异常

最新文章

  1. java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
  2. Warning C4819
  3. UNITY3D中涉及的一些数学知识
  4. 【uoj261】 NOIP2016—天天爱跑步
  5. Expect 入门
  6. 基于visual Studio2013解决算法导论之015第二小元素
  7. Codeforces Round #354 (Div. 2)_Vasya and String(尺取法)
  8. Omi原理-环境搭建
  9. python之进程,线程,协程简单理解
  10. Js表单验证控件-02 Ajax验证
  11. socketserver实例化过程
  12. fiddlescript 操作
  13. JQ 弹出层全屏
  14. WPF 中对启动参数的处理
  15. LZO压缩算法64位崩溃问题
  16. [转]VS2010快捷键
  17. C++ 类型转换的特殊用法
  18. How RTT works
  19. HDU3681 Prison Break
  20. 为微软ContosoUniversity例子加上学生自选课程计划

热门文章

  1. Windows下搭建FTP服务器
  2. Ubuntu下Eclipse安装与编译ns-3遇见的各种问题
  3. c++ 判断给定区间是否是一个heap. O(N) (is_heap)
  4. windows服务部署
  5. Android TableLayout中的使用说明
  6. Codeforces D - Ithea Plays With Chtholly
  7. Longest Repeating Character Replacement
  8. Oracle数据库system用户忘记了密码怎么办
  9. 10X Genomics vs. PacBio
  10. c++中的const函数