JVM内存结构分析整理

简介: JVM内存结构: 线程共享:堆,方法区 非线程共享: 虚拟机栈,本地方法栈,程序计数器 堆:所有的实例对象以及数组都要在堆上分配  ,从内存回收角度看: 细分为 新生代 和 老生代          是垃圾收集器管理的主要区域。 方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(JIT)编译后的代码   内存回收的主要目标:针对常量池的回收和对类型的卸载  

JVM内存结构:


线程共享:堆,方法区

非线程共享: 虚拟机栈,本地方法栈,程序计数器


堆:所有的实例对象以及数组都要在堆上分配  ,从内存回收角度看: 细分为 新生代 和 老生代          是垃圾收集器管理的主要区域。

方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(JIT)编译后的代码  

内存回收的主要目标:针对常量池的回收和对类型的卸载                                                                              垃圾比较少回收这个区域。

String.intern()方法 注意(参考深入 理解java虚拟机)


虚拟机栈: 线程私有,生命周期与线程相同   为虚拟机执行java方法(字节码)服务

 描述的是java方法执行的内存模型 :

每个方法被执行时同时会创建一个栈帧 用于存储局部变量表 、操作栈、动态链接、方法出口信息。方法被调用到执行完 对应着栈帧在虚拟机栈中从入栈到出栈的过程


本地方法栈:为虚拟机使用到的Native方法服务


程序计数器:线程私有   当前线程所执行的字节码的行号指示器。记录正在执行的虚拟机字节码指令的地址。


JVM垃圾回收机制:

GC的基本原理:找到程序中不再被使用的对象,然后回收这些对象所占用的内存空间。
GC判断对象不再使用的算法:
对象存活判断算法:引用计数算法和根搜索算法
基本的垃圾回收算法:标记-清除、复制、标记-整理,分代收集算法
依赖线程实现的回收算法:串行、并行、并发

 其中对象存活判定算法是其他算法的基石,用来判断对象是否存活,能否回收;基本的垃圾回收算法是垃圾垃圾收集器实现的基础算法;而依赖线程实现的算法,则是基本算法在考虑线程环境下的运用,这个有多线程基础的看名字就明白了。此外,还有综合以上算法并从特定角度实现的算法,如分代回收(针对分区)、增量回收(针对实时性)


内存分配和回收策略

1.对象优先在新生代 Eden上分配

2.大对象直接进入老年代

3.长期存活的对象将进入老年代(动态对象年龄判定

相关文章
|
存储 安全 算法
深入剖析JVM内存管理与对象创建原理
JVM内存管理,JVM运行时区域,直接内存,对象创建原理。
40 2
|
1月前
|
存储 算法 安全
【JVM】深入理解JVM对象内存分配方式
【JVM】深入理解JVM对象内存分配方式
26 0
|
1月前
|
Java 程序员
探讨JVM垃圾回收机制与内存泄漏
探讨JVM垃圾回收机制与内存泄漏
|
26天前
|
存储 缓存 Java
金石原创 |【JVM盲点补漏系列】「并发编程的难题和挑战」深入理解JMM及JVM内存模型知识体系机制(1)
金石原创 |【JVM盲点补漏系列】「并发编程的难题和挑战」深入理解JMM及JVM内存模型知识体系机制(1)
34 1
|
26天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
68 0
|
12天前
|
存储 前端开发 安全
JVM内部世界(内存划分,类加载,垃圾回收)(上)
JVM内部世界(内存划分,类加载,垃圾回收)
46 0
|
16天前
|
存储 算法 安全
深度解析JVM世界:JVM内存分配
深度解析JVM世界:JVM内存分配
|
28天前
|
算法 Java C++
【C/C++ 内存知识扩展】内存不足的可能性分析
【C/C++ 内存知识扩展】内存不足的可能性分析
12 0
|
1月前
|
缓存 Java
java使用MAT进行内存分析
java使用MAT进行内存分析
|
1月前
|
存储 缓存 安全
[Java基础]——JVM内存模型
[Java基础]——JVM内存模型