Java转行之路—《深入理解JAVA虚拟机总结》(一)

简介: JVM运行时数据区

Java转行之路—《深入理解JAVA虚拟机总结》(一)

Java虚拟机运行时数据区

程序计数器(Program Counter Register)

(1)Little Space
(2)当前所执行字节码的行号指示器
(3)每条线程都有独立的程序计数器——线程切换后回到正确的位置
ps.多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的

虚拟机栈(Virtual Machine Stacks)

(1) 线程私有,生命周期与线程相同
(2) 原理图
(3) 线程请求栈的深度大于虚拟机所允许的深度,抛出StackOverflowError;

       虚拟机栈动态扩展时无法申请到足够的内存,抛出OutOfMemoryError。

1

本地方法栈(Native Method Stack)

本地方法栈与虚拟机栈作用相似,区别:虚拟机栈为虚拟机执行Java
方法服务,本地方法栈则为Native方法服务。

Java堆(Heap)

(1)最大的一块内存;
(2)被所有线程共享,在虚拟机启动时创建;
(3)唯一目的:存放对象实例;
(4)垃圾收集器管理的主要区域,因此也被称为GC堆。由于GC回收机制采用分代收集算法,所以堆还可以分为新生代和老年代; 从内存分配角度看,堆可划分出多个线程私有的分配缓冲区。
(5)不需要连续的内存,可以选择固定大小也可以通过-Xmx和-Xms控制虚拟机扩展,堆无法再扩展时,抛出OutOfMemoryError。

方法区

用于储存已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
不需要连续的内存,可以选择固定大小也可以通过-Xmx和-Xms控制虚拟机扩展,可以选择不实现垃圾收集。这区域的内存回收目标主要是针对常量池的回收和对象类型的卸载。

运行时常量池

(1)Runtime Constant Pool是方法区的一部分。

  • Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,发生于类加载后进入方法区的运行时。
  • 运行时常量池vsClass文件常量池:虚拟机规范对于运行时常量池无任何细节要求,除了保存Class文件中描述的符号引用外,还会把翻译出来的直接引用也储存在运行时常量池中;运行时常量池具备动态性,String.intern()方法可以将运行时新的常量放入池中。

直接内存

不是虚拟机运行时数据取的一部分,但这部分内存也被频繁使用,也可能导致OutOfMemoryError。
NIO(基于通道与缓冲区的I/O方式)可以使用Native函数库直接分配堆外内存,然后通过堆中DirectByteBuffer对象作为这块内存的引用进行操作。

相关文章
|
14天前
|
Oracle Java 关系型数据库
java体系结构和jvm
java体系结构和jvm
|
1月前
|
Java 编译器 测试技术
滚雪球学Java(03):你知道JDK、JRE和JVM的不同吗?看这里就够了!
【2月更文挑战第12天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
105 4
|
2月前
|
算法 Java 关系型数据库
掌握这3个技巧,你也可以秒懂JAVA性能调优和jvm垃圾回收
JVM 是一个虚拟化的操作系统,类似于 Linux 和 Window,只是他被架构在了操作系统上进行接收 class 文件并把 class 翻译成系统识别的机器码进行执行,即 JVM 为我们屏蔽了不同操作系统在底层硬件和操作指令的不同。
22 0
|
2月前
|
存储 缓存 算法
深入剖析Java中JVM的内存模型!!!
对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。
49 1
|
1月前
|
存储 Java 数据安全/隐私保护
【JVM】Java虚拟机栈(Java Virtual Machine Stacks)
【JVM】Java虚拟机栈(Java Virtual Machine Stacks)
35 0
|
25天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
67 0
|
1月前
|
存储 缓存 安全
[Java基础]——JVM内存模型
[Java基础]——JVM内存模型
|
1月前
|
算法 Java UED
【JVM】分代收集算法:提升Java垃圾回收效率
【JVM】分代收集算法:提升Java垃圾回收效率
20 0
|
1月前
|
Java
【JVM】深入理解Java引用类型:强引用、软引用、弱引用和虚引用
【JVM】深入理解Java引用类型:强引用、软引用、弱引用和虚引用
94 0
|
1月前
|
存储 安全 Java
【JVM】Java堆 :深入理解内存中的对象世界
【JVM】Java堆 :深入理解内存中的对象世界
50 0