zoukankan      html  css  js  c++  java
  • java面试一日一题:1.6/7/8Java内存区域有什么不同吗

    问题:请讲下在JDK6 JDK7 JDK8中java内存区域有什么不同吗

    分析:该问题主要考察对JVM运行时区域的了解,首先要了解最基本的内存区域划分,然后再去掌握其中的变化,再延申一点,为什么要这样变化;

    回答要点:

    主要从以下几点去考虑,

    1、内存区域的基本划分是什么?

    2、内存区域在不同的版本下是怎么变化的?

    3、内存区域为什么会有这样的变化?

    jvm运行时区域分为堆、方法区、虚拟机栈、本地方法栈、程序计数器;

    在不同版本的JDK中变化最大的是方法区,在JDK6中方法区中有常量池,其中常量池可分为运行时常量池、类常量池、字符串常量池,在JDK7时,把字符串常量池移到了堆中;在JDK8时,把方法区干掉,换成了堆外内存的元数据空间,同时运行时常量池和类常量池跟着在元数据空间中,但字符串常量池仍在堆中;

    为什么要这么做那,其原因时为了减少OOM的发生,因为字符串常量池在方法区中的话,容易造成OOM,方法区也就是永久代在启动的时候可以设置大小,但是无法动态扩展,随着程序中使用字符的增多,或者不当的操作,很容易造成方法区OOM,所以把字符串常量池移到堆中。

    有不当之处,欢迎指正,谢谢!

    一个爱写文章的程序员,欢迎关注我的公众号“北漂程序员”。我有故事,你有酒吗
  • 相关阅读:
    第一次冲刺个人博客03
    第一次冲刺个人博客02
    《梦断代码》阅读笔记01
    “进度条”博客——第十一周
    “进度条”博客——第十周
    “进度条”博客——第九周
    站立会议个人博客10(2016/4/28)
    站立会议个人博客9(2016/4/27)
    站立会议个人博客8(2016/4/26)
    站立会议个人博客7(2016/4/25)
  • 原文地址:https://www.cnblogs.com/teach/p/14613365.html
Copyright © 2011-2022 走看看