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

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

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

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

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

额外知识:

内存的分配策略:

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

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

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

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

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

7a476a4a2cba226ca451e0acd8945540.png

5ff2571921fb951d84b27c9cbb329b9e.png

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

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值