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

  • 相关阅读:
    BFS 简单思想以及代码
    01、Hibernate安装配置
    WireShark——ARP 协议包分析
    eNSP之VLAN设计实验
    eNSP 交换机 路由器 PC 互连设计/实现
    Windows常用的网络命令
    01、Git安装教程(windows)
    Java IO编程——文件拷贝
    Java 多线程编程——多线程
    Java IO编程——转换流
  • 原文地址:https://www.cnblogs.com/vingLiu/p/10652514.html
Copyright © 2011-2022 走看看