Java内存模型

JDK8

程序计数器:

当前线程所执行的字节码行号指示器(逻辑)、

改变计数器的值来选取下一条需要执行的字节码指令、

和线程1对1、对java方法计数,

如果是native方法则为undefined、不会发生内存泄漏

虚拟机栈:

java方法执行的内存模型

包含多个栈帧(栈帧包含:局部变量表 操作数栈 动态链接 返回地址)

元空间:

元空间替代永久代,使用本地内存,永久代使用的是JVM内存

类加载信息:CLass Method Field System(Class)

对象实例的分配区域

GC管理的主要区域

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

-Xss:规定了每个线程虚拟机栈(堆栈)的大小,一般配置256k足矣,此配置将会影响此进程中并发线程数的大小

-Xms:堆的初始值

-Xmx:堆能达到的最大值

Java内存模型中堆和栈的区别

内存分配策略:

静态存储:编译时确定每个数据目标在运行时的存储空间需求

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

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

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

区别:

1.管理方式:栈自动释放,堆需要GC

2.空间大小:栈比堆小

3.碎片相关:栈产生的碎片远小于堆

4.分配方式:栈支持静态和动态分配,而堆仅支持动态分配

5.效率:栈的效率比堆高

 

元空间、堆、线程独占部分间的联系(内存角度)

元空间:CLass Method Field System(Class)

堆:Object

线程独占:虚拟机栈、本地方法栈、程序计数器

 

JDK版本之间的差异

intern方法(JDK6/JDK789):String s = new String("a");s.intern();

JDK6:当调用intern方法时,如果字符串常量池中先前已创建出该字符串对象,则返回池中的该字符串的引用。否则,将此字符串对象添加到字符串常量池中,并且返回该字符串对象的引用。

JDK6+:(字符串常量池移到堆当中,而不是在永久代中)当调用intern方法时,如果字符串常量池中先前已创建出该字符串对象,则返回池中该字符串的引用。否则,㘝该淄川对象已经存在于Java堆中,则将堆中对此对象的引用添加到字符串常量池中,并且返回该引用;如果堆中不存在,则在池中创建该字符串并返回。

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值