Java内存管理(栈,堆,方法区)

在栈内存中保存的是堆内存空间的访问地址,或者说栈中的变量指向堆内存中的变量。

栈是Java方法执行的内存模型每个方法在执行的同时都会创建一个栈帧的用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用直至执行完成的过程就对应着一个栈帧在虚拟机中入栈和出栈的过程。

堆内存用来存放由new创建的对象实例和数组。

堆是所有线程共享的一块内存区域,在虚拟机启动时创建,此内存区域的唯一目的就是存放对象实例 。

方法区

存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

方法区是各个线程共享的内存区域

GC机制(Garbage Collection,垃圾收集,垃圾回收)

垃圾回收机制是Java提供的自动释放内存空间的机制。

该机制对 JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,永不停息(Nerver Stop)的保证JVM中的内存空间,防止出现内存泄露和溢出问题。

JVM垃圾回收算法

  1. 标记-清除算法:标记可回收的对象,集中清除。造成内存碎片多,内存不连续,当有大对象需要分配内存时,可能会再次出发垃圾回收。
  2. 标记-整理算法:标记可回收的对象,集中清除,清除后,会集中整理内存区域,使未使用的内存区域连续,但是整理内存区域会使整体效率较低
  3. 复制算法:将内存区域分为大小相同的2块,当A块的内存满了后,会触发回收,将A块中仍然存活的对象复制到B块中,然后清除A块中的所有对象。此算法效率高,没有碎片,适合在新生代使用,但是内存利用率低,不适合老年代使用
  4. 分代回收算法(JVM中使用):新生代使用复制算法,老年代使用标记-清除/整理算法

JVM垃圾收集器

  1. Serial收集器:单线程收集器,工作时需要暂停其他线程的工作。
  2. ParNew收集器:Serial收集器的多线程版本,线程数默认和CPU核数相同(可以通过配置修改)。
  3. Parallel Scavenge收集器:时Server模式下默认的多线程收集器,注重CPU利用率。如果优化比较困难时,可使用Parallel Scavenge收集器配合自适应调节策略,把内存管理的调优任务交给虚拟机去完成。
  4. CMS收集器:以获取最短回收停顿时间为目标
  5. G1收集器:面向服务器的收集器,主要针对配备多颗处理器及大容量内存的机器

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值