zoukankan      html  css  js  c++  java
  • java内存模型(线程共享部分)

    1、元空间(MetaSpace)与永久代(PermGen)的区别?

    ----》

    1.1 元空间使用的是本机内存(这样的好处是,可以使用的内存空间变大了,没有OutOfMemoryError:PermGen space异常) ,永久代使用的是jvm内存!!!!核心!!!!

    1.2 没有了字符串常量池(在jdk7中已经被移动到堆中),

    1.3 存储的东西包括:类文件,在jvm运行时的数据结构,以及class的相关内容(如 method field)大体上都喝永久代一样,但是划分上更加合理了(比如类以及相关的元数据的生命周期与类加载器一致,每个加载器都会分配一个存储空间,可以单独更深入去了解)。

    而永久代是用jvm内存

    在jdk8中,metaspace替代了permgen

    问MetaSpace相比PermGen的优势是什么?

    1、字符串常量池存在永久代中,容易出现性能问题和内存不足

    2、类和方法的信息大小难易确定,给永久代的大小制定带来问题

    3、永久代会为GC带来不必要的复杂性(GC需要特殊处理永久代中数据)

    4、方便HotSpo与其他JVM如Jrockit的集成

    java堆(Heap)

    说明,在虚拟机启动的时候创建,也是虚拟机中占内存最大的一块,唯一目的是保存对象实例

    1、对象实例的分配区域

    2、GC管理的主要区域

    问题:JVM 三大性能调优参数 -Xms -Xmx -Xss的含义?

    ---》java -Xms 128m -Xmx128m -Xss256k -jar xxx.jar

    -Xss 规定每个线程的虚拟机栈的内存大小(影响并发线程数的大小)

    -Xms : 堆的初始值(一旦对象超过这个值,会自动扩容,扩展到Xmx值)

    -Xmx: 堆能达到的最大值(一般将Xms和Xmx设置的值都是一样的,为了防止发生扩容时会发生内存抖动)

    问题:请问Java内存模型中堆和栈的区别-----内存分配策略

    ----》

    管理方式:栈不需要GC回收,堆需要GC

    空间大小:栈的内存空间比堆的内存空间小

    碎片相关:栈产生的碎片远少于堆

    分配方式:栈支持静态和动态存储。而堆只支持动态存储

    效率:栈比堆的执行效率高(内存块的结构本来就是栈的结构,堆的结构是双向链表,灵活度高,但是效率低)

    额外知识:

    内存的分配策略:

    静态存储:编译时就计算出每个数据在运行时所需要的存储空间大小

    栈式存储:数据区需求在编译时未知,只在运行时模块入口前确定

    堆式存储:编译时或运行时模块入口都无法确定,动态分配

    联系:栈保存时对象的引用,堆保存对象的实例(引用对象、数组时,栈里定义变量保存堆中目标的首地址)

    可以看看下图,简单的程序,对应着元空间,堆,线程独占的联系:

    问题:请解析一下不同JDK版本之间的intern()方法的区别----JDK6 VS JDK6+ ?

    ----》https://www.cnblogs.com/Kidezyq/p/8040338.html

  • 相关阅读:
    [转]数值分析——多项式插值之Lagrange插值
    [转]上拉电阻&下拉电阻&高阻态
    [转]Verilog学习笔记基本语法篇(十三)...............Gate门
    Spring MVC中的Controller是Serlvet吗?
    preparestatement和statement的区别&&简单的SQL注入
    jquery局部变量和全局变量的错误
    js 中{},[]中括号,大括号使用详解
    Java数据库学习之SQL语句动态拼接
    jquery中关键字写错导致的错误——dataType写成dateType(data写成date)
    一次隐蔽的while死循环
  • 原文地址:https://www.cnblogs.com/vingLiu/p/10652514.html
Copyright © 2011-2022 走看看