写在前面
最近 , 一直有小伙伴让我整理下关于JVM的知识,经过十几天的收集与整理,初版算是整理出来了 。希望对大家有所帮助 。JDK 是什么?JDK 是用于支持 Java 程序开发的最小环境 。
- Java 程序设计语言
- Java 虚拟机
- Java API类库
- Java SE API 子集
- Java 虚拟机
- 引入泛型;
- 增强循环,可以使用迭代方式;
- 自动装箱与自动拆箱;
- 类型安全的枚举;
- 可变参数;
- 静态引入;
- 元数据(注解);
- 引入Instrumentation 。
- 支持脚本语言;
- 引入JDBC 4.0 API;
- 引入Java Compiler API;
- 可插拔注解;
- 增加对Native PKI(Public Key Infrastructure)、Java GSS(Generic SecurityService)、Kerberos和LDAP(Lightweight Directory Access Protocol)的支持;
- 继承Web Services;
- 做了很多优化 。
- switch语句块中允许以字符串作为分支条件;
- 在创建泛型对象时应用类型推断;
- 在一个语句块中捕获多种异常;
- 支持动态语言;
- 支持try-with-resources;
- 引入Java NIO.2开发包;
- 数值类型可以用2进制字符串表示,并且可以在字符串表示中添加下划线;
- 钻石型语法;
- null值的自动处理 。
- 函数式接口
- Lambda表达式
- Stream API
- 接口的增强
- 时间日期增强API
- 重复注解与类型注解
- 默认方法与静态方法
- Optional 容器类
- 程序计数器
- Java 虚拟机栈
- 本地方法栈
- Java 堆
- 方法区
- 运行时常量池
- 直接内存
由于 Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式实现的 。为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程之间的计数器互不影响,独立存储 。
- 如果线程正在执行的是一个 Java 方法,计数器记录的是正在执行的虚拟机字节码指令的地址;
- 如果正在执行的是 Native 方法 , 这个计数器的值为空 。
Java 虚拟机栈(线程私有)Java 虚拟机栈(Java Virtual Machine Stacks)是线程私有的 , 生命周期与线程相同 。虚拟机栈描述的是 Java 方法执行的内存模型:每个方法被执行的时候都会创建一个栈?。⊿tack Frame),存储
- 局部变量表
- 操作栈
- 动态链接
- 方法出口
这个区域有两种异常情况:
- StackOverflowError:线程请求的栈深度大于虚拟机所允许的深度
- OutOfMemoryError:虚拟机栈扩展到无法申请足够的内存时
本地方法栈(Native Method Stacks)为虚拟机使用到的 Native 方法服务 。
Java 堆(线程共享)Java 堆(Java Heap)是 Java 虚拟机中内存最大的一块 。Java 堆在虚拟机启动时创建,被所有线程共享 。
作用:存放对象实例 。垃圾收集器主要管理的就是 Java 堆 。Java 堆在物理上可以不连续,只要逻辑上连续即可 。
方法区(线程共享)方法区(Method Area)被所有线程共享 , 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 。
和 Java 堆一样 , 不需要连续的内存,可以选择固定的大小,更可以选择不实现垃圾收集 。
运行时常量池运行时常量池(Runtime Constant Pool)是方法区的一部分 。保存 Class 文件中的符号引用、翻译出来的直接引用 。运行时常量池可以在运行期间将新的常量放入池中 。
Java 中对象访问是如何进行的?
Object obj =newObject();
对于上述最简单的访问,也会涉及到 Java 栈、Java 堆、方法区这三个最重要内存区域 。Object obj
如果出现在方法体中,则上述代码会反映到 Java 栈的本地变量表中,作为 reference 类型数据出现 。
推荐阅读
- JVM学习笔记——垃圾回收篇
- 雾境序列荒林回响主线3
- 网吧怎么玩明日之后(网吧怎么登录明日之后pc)
- 低配电脑怎么玩明日之后(电脑如何玩明日之后)
- 【Java复健指南09】项目练习全解--房屋出租系统
- 【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程
- 【Bluetooth|蓝牙开发】二、蓝牙开发入门
- 【深入浅出 Yarn 架构与实现】1-1 设计理念与基本架构
- 原神香醉坡兰那罗在哪
- 黑莓q5用安装微信的方法a 用黑莓自带的印象笔记手敲的 看不懂的宝宝们在私聊我吧