JVM内存结构(1)

简介: JVM内存结构

引言

常见的JVM

学习路线

jvm内存结构

1. 程序计数器

1.1 定义

Program Counter Register程序计数器(寄存器)

可以看做是当前线程所执行的字节码的行号指示器,字节码解释器的工作时就是通过改变这个计数器的值来选取下一条执行的字节码指令

特点

  • 线程私有的(因为每个线程执行的程序是不一样的)
  • 不会内存溢出

1.2 作用

程序计数实际上是由寄存器来实现的

2. 虚拟机栈

线程私有,且生命周期线程相同,每个方法运行时java虚拟机都会同步创建一个栈帧用于存储局部变量表,也就是栈帧是每个方法运行时需要的内存,比如方法的变,返回值等

2.1 定义

  • 每个线程运行时需要的内存,成为虚拟机栈
  • 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存
  • 每个线程只能有一个活动栈,对于着当前正在执行的方法

栈的默认大小

问题

  1. 垃圾回收是否涉及栈内存?
    不涉及,因为每次方法运行结束栈帧会自动弹出
  2. 栈内存分配的越大越好吗
    不会,栈内存越多那么,线程数目会越少
  3. 方法内的局部变量是否线程安全
  • 局部变量是局部私有的,但是如果static会有线程安全问ti
  • 如果局部变量引用了对象,并逃离了该方法的作用范围也是不安全的

两个线程都会修改同一个StringBuilder对象

这里返回了说明其他线程也会拿到该对象进行修改,也不安全

2.2 栈内存溢出

  • 帧过多导致栈溢出(递归)
  • 栈帧过大

2.3 线程运行诊断

案例一,cpu占用过高

定位

  • 用top定位哪个进程对cpu占用过高
  • ps H -eo pid,tid,%cpu | grep 进程id

可以查看进程内的线程的cpu占用

  • jstack 进程id
  • 可以根据线程id找到有问题的线程,进一步找到问题代码的行号

案例二, 迟迟不到结果

找到死锁

3. 本地方法栈

就是c/c++ 编写的方法和系统底层打交道

JVM内存结构(2)https://developer.aliyun.com/article/1530768

相关文章
|
6天前
|
存储 Java C++
Java虚拟机(JVM)在执行Java程序时,会将其管理的内存划分为几个不同的区域
【6月更文挑战第24天】Java JVM管理内存分7区:程序计数器记录线程执行位置;虚拟机栈处理方法调用,每个线程有独立栈;本地方法栈服务native方法;Java堆存储所有对象实例,垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息;运行时常量池存储常量;直接内存不属于JVM规范,通过`java.nio`手动管理,不受GC直接影响。
16 5
|
4天前
|
存储 Java 对象存储
jvm内存模型剖析
当线程cpu时间片执行完后,线程进入休眠状态,当再次唤醒时,通过程序计数器确定指令执行到哪一行,然后继续往下执行。
16 1
|
6天前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
17 2
|
10天前
|
监控 算法 Java
Java虚拟机(JVM)使用多种垃圾回收算法来管理内存,以确保程序运行时不会因为内存不足而崩溃。
【6月更文挑战第20天】Java JVM运用多种GC算法,如标记-清除、复制、标记-压缩、分代收集、增量收集、并行收集和并发标记,以自动化内存管理,防止因内存耗尽导致的程序崩溃。这些算法各有优劣,适应不同的性能和资源需求。垃圾回收旨在避免手动内存管理,简化编程。当遇到内存泄漏,可以借助VisualVM、JConsole或MAT等工具监测内存、生成堆转储,分析引用链并定位泄漏源,从而解决问题。
24 4
|
12天前
|
算法 Java
Java垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)的一种自动内存管理机制,用于在运行时自动回收不再使用的对象所占的内存空间
【6月更文挑战第18天】Java的GC自动回收内存,包括标记清除(产生碎片)、复制(效率低)、标记整理(兼顾连续性与效率)和分代收集(区分新生代和老年代,用不同算法优化)等策略。现代JVM通常采用分代收集,以平衡性能和内存利用率。
36 3
|
17天前
|
算法 安全 Java
JVM系列4-垃圾收集器与内存分配策略(二)
JVM系列4-垃圾收集器与内存分配策略(二)
23 0
JVM系列4-垃圾收集器与内存分配策略(二)
|
2天前
|
缓存 Java
《JVM由浅入深学习九】 2024-01-15》JVM由简入深学习提升分(生产项目内存飙升分析)
《JVM由浅入深学习九】 2024-01-15》JVM由简入深学习提升分(生产项目内存飙升分析)
9 0
|
2天前
|
存储 缓存 算法
详解JVM内存优化技术:压缩指针
详解JVM内存优化技术:压缩指针
|
2天前
|
Java UED 开发者
JVM逃逸分析原理解析:优化Java程序性能和内存利用效率
JVM逃逸分析原理解析:优化Java程序性能和内存利用效率
|
2天前
|
存储 缓存 监控
深入解析JVM内存分配优化技术:TLAB
深入解析JVM内存分配优化技术:TLAB