1.JVM内存分配分区

Java的内存简单分为堆内存和非堆内存
其中堆内存又可以分为新生代和老年代
新生代分为1个Eden区和2个Survivor区,如下图:

2.JVM垃圾回收种类

分为2种,MinorGC和FullGC.
MinorGC针对新生代的内存回收,时间较短,经常发生。
FullGC针对老年代的回收,通常伴随MinorGC,耗费时间较久,较少发生。

3.JVM内存分配策略

(1)先在Eden区分配,如果不够分配的话,发生MinorGC。
(2)进行MinorGC时,会把Eden中有在使用的对象放到其中一个Survivor中。如果Survivor中放不下,则会进入老年代。
(3)每次进行MinorGC时,在Survivor中存活的对象会增加1岁,默认超过15岁的对象(MaxTenuringThreshold),会进入老年代。
(4)JVM的参数有一个叫PretenureSizeThreshold,大小超过这个值的对象会直接进入老年代。

4.垃圾回收器种类

Serial/Serial Old

(1)适合单个CPU
(2)Serial采用复制算法,适合新生代
(3)Serial Old采用标记-整理算法,适合老年代

ParNew

(1)多线程,并行

Parallel Scavenge

(1)适合新生代,并行
(2)适合后台运算的任务,追求的是吞吐量,支持参数自适应

Parallel Old

(1)适合老年代,与Parallel Scavenge搭配使用

CMS(Consurrent Mark Sweep)

(1)追求短停顿,采用标记-清除算法
(2)无法处理浮动垃圾
(3)要求CPU较多

G1

(1)并行+并发
(2)分代采用不同算法进行收集
(3)标记整理+复制算法
(4)可预测停顿时间

Java虚拟机内存分配策略相关推荐

  1. Java虚拟机-内存分配策略

    Java技术体系中所提倡的自动内存管理策略最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存: 几条普遍的分配规则: 1.对象优先在Eden区分配 年轻代分为三个区:1个Ed ...

  2. JAVA虚拟机内存分配原则 (转

    Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间, ...

  3. Java 虚拟机内存分配机制

    Java 虚拟机内存分配机制 内存区域划分 对于大多数的程序员来说,Java 内存比较流行的说法便是堆和栈,这其实是非常粗略的一种划分,这种划分的"堆"对应内存模型的 Java 堆 ...

  4. Java 虚拟机内存分配与回收策略

    垃圾收集器与内存分配策略参考目录: 1.判断 Java 对象实例是否死亡 2. Java 中的四种引用 3.垃圾收集算法 4. Java9 中的 GC 调优 5.内存分配与回收策略 一.对象优先在 E ...

  5. Java的内存分配策略有哪些_Java的内存分配策略

    简单来说,对象内存分配主要是在堆中分配.但是分配的规则并不是固定的,取决于使用的收集器组合以及JVM内存相关参数的设定 以下介绍几条基本规则(使用的ParNew+Serial Old收集器组合): 一 ...

  6. 《深入理解Java虚拟机》-----第3章 垃圾收集器与内存分配策略

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. 3.1 概述 说起垃圾收集(Garbage Collection,G ...

  7. 《深入理解java虚拟机》笔记2——GC算法与内存分配策略

    说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...

  8. JAVA虚拟机之垃圾收集与内存分配策略

    最近再看<深入理解JAVA虚拟机>周志明写的第二版.现将学习笔记分享出来,方便日后复习,理解有误的地方欢迎指正! 1.运行时数据区: 程序计数器:一块较小的内存空间,保存当前线程所执行的字 ...

  9. Java虚拟机-第二篇-GC算法与内存分配策略

    2019独角兽企业重金招聘Python工程师标准>>> GC引入 在Java的运行时数据区中,程序计数器.虚拟机栈.本地方法栈三个区域都是线程私有的,随线程而生,随线程而灭,在方法结 ...

最新文章

  1. Cognizant:走向2028年将诞生的21个新工作
  2. JavaWeb——多个Filter代码的执行顺序
  3. android 模拟器识别,一种基于符号的识别Android应用运行在模拟器中的方法与流程...
  4. Ubuntu 16.04 64位安装arm-linux-gcc交叉编译器以及samba服务器
  5. 导入win32_为什么DLL在导入项没有成功解析时会加载失败?
  6. 谁的人生不迷茫?在这5句诗词里,有你想要的答案
  7. Vue 凭什么成为 2020 年的一匹黑马
  8. mysql 关联查询慢_mysql慢查询语句分析总结
  9. 区间dp——cf1025D二叉搜索树的中序遍历好题!
  10. PHP提高编程效率的方法
  11. iyiw oracle_Oracle 单行函数
  12. 精选13款Spring Boot 优质GitHub开源项目!
  13. python模拟三次输入密码_python 3.0 模拟用户登录功能并实现三次错误锁定
  14. wifi修复记录(8个方法)
  15. 网络协议-dhcp报文分析
  16. 12C新特性--Application Continuity
  17. C#快递单号查询源码
  18. LTE语音业务 - VOLTE
  19. 超级淘为什么能在众多新零售导购平台崛起,并深受大家欢迎
  20. 华为云弹性文件服务 SFS

热门文章

  1. python同时输出多个值_python如何实现输出多个值?
  2. 后缀数组--可重叠的K次最长重复子串(POJ3261)
  3. 斯特林反演[bzoj4671]异或图
  4. 【Boost】以boost::function和boost:bind取代虚函数
  5. 嗅探(被动嗅探)与ARP欺骗(主动嗅探)详解
  6. 五分钟快速理解 Reactor 模型
  7. LiveVideoStack公众号2021年终盘点
  8. OneVPL与FFmpeg/GStreamer硬件编解码器
  9. 音视频技术开发周刊 | 189
  10. 曾小伟:谁没被“不可思议”的薪资吸引过?