专栏首页凯哥JavaJVM学习系列学习三
原创

JVM学习系列学习三

我们接着上一篇文章讲解:

堆、栈、永久区比较

Heap(堆内存):

    在Java中,创建的所有引用对象类型,都在堆内存中。堆内存中的数据由GC对其进行管理的。其实堆内存也是GC主要管理的地方。

    如:释放不再被程序引用的对象所占用的内存

Stack(栈内存)

    栈内存与堆内存是相对的。栈内存存放的是基础数据类型。如:int、long等。是由程序的执行顺序控制变量的进出栈顺序,这里的数据不受GC管控的。

Perm(永久区)

    永久区是用于存储类的元数据。如:类的定义、方法定义(application metadata),用来描述类及方法的元数信息。

需要注意的是:永久区不是堆的一部分。

永久区的生命周期与JVM是绑定的;

堆内存的生命周期与程序绑定的。

内存管理优化参数:

-Xms

设置JVM启动时的堆内存(Heap)的大小

-Xmx     For setting the maximum heap size.

设置堆内存(Heap)的最大值

-Xmn

设置 Young Gen 内存区的大小

-XX:PermGen

设置 Perm Gen 内存的初始大小

-XX:MaxPermGen

设置 Perm Gen 内存的最大值

-XX:SurvivorRatio

设置 Eden Gen 与 S0 Gen,S1 Gen 内存的大小比。默认值:8

例如:

Young Gen 大小为 10M,

-XX:SurvivorRatio=2

则:

Eden Gen 的大小为 5,

S0 和 S1 的大小分别为 2.5

-XX:NewRatio

设置 Old Gen / Young Gen 的值。默认:2

大部分情况下,默认值不用调。

JDK1.8堆内存模型

从上图中我们可以看出,在JDK1.8的内存模型中是由2部分组成的:年轻代和年老代

年轻代:Eden+2*svrvivor

年老代:OldGen

1.8与1.7堆内存模型区别:

在1.8中最大的变化就是Perm区(年老区),用metaspace(元数据空)进行了替换。

这里需要特别强调的是:元数据区(metaspace)所占用的内存空间并非虚拟机内部的,而是直接在本地的内存空间中。这也是1.8与1.7永久代最大的区别所在。

在1.8之后为什么要废弃掉1,7中永久区呢?

官方给出的答案:

在实际使用中,永久区内存经常会出现不够用的情况或是发生内存泄漏,也就是抛出java.lang.OutOfMemoryError:PermGen的错误。基于这个原因,才改用使用本地内存空间。

本文是《JVM学习系列》中的第三篇文章。如果想系统的学习,建议从本教程第一篇开始看。

下节预告:

本文来源:http://www.kaigejava.com/article/detail/463

凯哥个人博客:http://www.kaigejava.com

凯哥公众号:凯哥java(kaigejava)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JVM学习系列学习三

        在Java中,创建的所有引用对象类型,都在堆内存中。堆内存中的数据由GC对其进行管理的。其实堆内存也是GC主要管理的地方。

    凯哥Java
  • Java并发编程之CAS二源码追根溯源

    在上一篇文章中,我们知道了什么是CAS以及CAS的执行流程,在本篇文章中,我们将跟着源码一步一步的查看CAS最底层实现原理。

    凯哥Java
  • JVM学习系列学习六

    MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,

    凯哥Java
  • 内存溢出和内存泄漏

    通俗的讲就是设备内存不够了。就好比我们的手机,运行内存是4G的,当我们运行了太多的程序时,在运行其他的软件时就会很卡或者提示xx运行停止。

    A梦多啦A
  • Android Studio 4.1 中的本地内存分析

    本文是 Android Studio 4.1 中 Profiler 有哪些新增特性 的第二部分。之前的文章侧重于介绍 Android Studio 中 Syst...

    Android 开发者
  • 一次 Node.js 内存溢出

    因为内存上限设置不合理,引起的内存溢出问题。之前压测时候只关注了是否存在内存泄露与cpu占用,而忽视了内存占用这个问题。对于部署服务时,要根据机器的内存上限以及...

    腾讯IVWEB团队
  • linux 内存管理初探

    本文主要介绍 linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。

    郑剑
  • 【 Android 场景化性能测试】内存性能及内存泄漏篇

    承接《Android场景化性能测试-方向与框架篇》,本篇详述内存性能的具体测试方案和内存泄漏问题简单定位方法。

    腾讯移动品质中心TMQ
  • 翻译 | 带你秒懂内存管理 - 第一部(共三部)

    原文地址:A crash course in memory management 原文作者:Lin Clark 译者:黑黑 校对者:Bob 要理解为什么将 Ar...

    iKcamp
  • 内存泄露

    1.简介       在计算机科学中,内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理...

    猿人谷

扫码关注云+社区

领取腾讯云代金券