jvm内存参数图解,Xmn,Xms,Xmx,XX

Java中堆是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象和数组,如下图所示:在Java中,堆被划分成两个不同的区域:年轻代、老年代。年轻代(Young)又被划分为三个区域:Eden、S0、S1。这样划分的目的是为了使JVM能够更好的管理堆内存中的对象,包括内存的分派以及回收。 堆是GC收集垃圾的主要区域。GC分为两种:MinorGC、FullGC。1.年轻代…

大家好,又见面了,我是你们的朋友全栈君。

Java中堆是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象和数组,如下图所示:

在Java中,堆被划分成两个不同的区域:年轻代、老年代。年轻代(Young)又被划分为三个区域:Eden、S0、S1。这样划分的目的是为了使JVM能够更好的管理堆内存中的对象,包括内存的分派以及回收。 
堆是GC收集垃圾的主要区域。GC分为两种:Minor GC、Full GC。

这里写图片描述

1.年轻代
年轻代用来存放新近创建的对象,尺寸随堆大小的增加和减少而相应的变化,默认值是保持为堆的1/15.可以通过-Xmn参数设置年轻代为固定大小,也可以通过 -XX:NewRatio 来设置年轻代与年老代的大小比例,年轻代的特点是对象更新速度快,在短时间内产生大量的“死亡对象”。

年轻代的特点是产生大量的死亡对象,并且要是产生连续可用的空间, 所以使用复制清除算法和并行收集器进行垃圾回收.对年轻代的垃圾回收称作初级回收 (minor gc)。

初级回收将年轻代分为三个区域,一个新生代,2个大小相同的复活代,应用程序只能使用一个新生代和复活代,当发生初级回收时,gc挂起程序,然后将新生代和复活代中的存货对象复制到另外一个复活代中,然后一次性消除新生代和复活代,将原来的非复活代标记成活动复活代。将在指定次数回收后仍然存在的对象移动到老年代中,初级回收后,得到一个空的可用的新生代。

新生代几乎是所有Java对象出生的地方,即Java对象申请的内存以及存放都是在这个地方。Java中的大部分对象通常不需长久存货,具有朝生夕灭的性质。当一个对象呗判定为“死亡”的时候,GC就有责任来回收掉这部分对象的内存空间。新生代是GC收集的频繁区域。当对象在Eden出生后,在经过一次Minor GC后,如果对象还存活,并且能够被另外一块Survivor区域所容纳,则使用复制算法将这些仍然还活着的对象复制到另外一块Survivor区域中,然后清理所使用过的Eden和Survivor区,并且将这些对象的年龄设置为1,以后对象在Survivor区每经过一次Minor GC,就将对象的年龄加1,当对象的年龄达到某个值时(默认是15岁)这些对象就会成为老年代。

2.老年代
Full GC 是发生在老年代的垃圾收集动作,所采用的是标记-清除算法。

现实的生活中,老年代的人通常会比新生代的人 “早死”。堆内存中的老年代(Old)不同于这个,老年代里面的对象几乎个个都是在 Survivor 区域中熬过来的,它们是不会那么容易就 “死掉” 了的。因此,Full GC 发生的次数不会有 Minor GC 那么频繁,并且做一次 Full GC 要比进行一次 Minor GC 的时间更长。 另外,标记-清除算法收集垃圾的时候会产生许多的内存碎片 ( 即不连续的内存空间 ),此后需要为较大的对象分配内存空间时,若无法找到足够的连续的内存空间,就会提前触发一次 GC 的收集动作。

3.永久代
永久代是Hotspot虚拟机特有的概念,是方法区的一种实现,别的JVM都没有这个东西。在Java 8中,永久代被彻底移除,取而代之的是另一块与堆不相连的本地内存——元空间。 
永久代或者“Perm Gen”包含了JVM需要的应用元数据,这些元数据描述了在应用里使用的类和方法。注意,永久代不是Java堆内存的一部分。永久代存放JVM运行时使用的类。永久代同样包含了Java SE库的类和方法。永久代的对象在full GC时进行垃圾收集。
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127329.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HTML详细笔记

    HTML详细笔记

    2021年10月7日
    49
  • 关于gitlab Web IDE功能使用

    关于gitlab Web IDE功能使用gitlabWebIDE使用1,进入gitlab项目路径,可以看到有个WebIDE按钮2,点击WebIDE按钮,跳到下面的界面 2.1.在这里可以建新的文件夹或者文件。 2.2.选中新建的文件夹newfoldr,点击右边的按钮,选择上传文件, 2.3.点击commit 2.4.下面要选择合并到master分支。(如果你们需要每个人需要创建新的分支去合并到 master分支,也可以选下面的createanewbranch)。再点击commit

    2022年10月17日
    1
  • scope=prototype有什么作用_prototype和单例模式

    scope=prototype有什么作用_prototype和单例模式@Scope(“prototype”)//多例模式

    2022年8月19日
    6
  • 前端开发技术(vscode怎么下载)

    前言   在前端开发中,有一个非常好用的工具,VisualStudioCode,简称VScode。   都不用我安利VScode,大家就会乖乖的去用,无数个大言不惭的攻城狮,都被VScode比德芙还丝滑的强大功能所折服。   我是来给大家安利插件的,想做个比较全面的插件集合给大家。网上的我也看过一些,但是都比较零散,时间也久了一些,我结合最近的情况,总结一下,造福大家,才是我…

    2022年4月10日
    55
  • Python中输入和输出[通俗易懂]

    Python中输入和输出[通俗易懂]Python2.x版本: 1. raw_input: 格式:result = raw_input(‘提示信息’) 功能:会等待用户输入内容,直到用户按下Enter,会将用户输入的内容当做”字符串”,传递给接收的变量 2. input: 格式: result = input(…

    2022年6月13日
    27
  • 互联网金融风控模型「建议收藏」

    互联网金融风控模型「建议收藏」一、市场调研目前市面主流的风控模型1、互联网金融前10名排行榜(数据截止日期2017-09-12)互联网金融公司排名分别是蚂蚁金服、陆金所、京东金融、苏宁金融、百度金融、腾讯理财通、宜信、钱大掌柜、万达金融和网易理财。1.1蚂蚁金服1.1.1大数据技术对接第三方征信公司芝麻信用分,通过用户信用历史、行为偏好、履约能力、身份特质、人脉关系五个维度对…

    2022年6月14日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号