Java底层:JVM(七)

本文深入探讨Java内存模型,对比元空间与永久代的区别,解析内存溢出错误,阐述元空间优势,并详细介绍JVM性能调优参数-Xms、-Xmx、-Xss的含义。此外,还对比了堆和栈在内存分配策略上的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你了解Java的内存模型么(下)

元空间(MeataSapce)与永久代(PermGen)的区别

元空间使用本地内存,而永久代使用的是jvm的内存
java.lang.OutOfMenoryErooo

MeataSpace相比PermGen的优势

1.字符串常量池存在永久代中,容易出现性能问题和内存溢出
2.类和方法的信息大小难易确定,给永久代的大小指定带来困难
3.永久代会为GC带来不必要的复杂性
4.方便HotSpot与其他JVM如Jrockit的集成

在这里插入图片描述

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

-Xss:规定了每个线程虚拟机栈(堆栈)的大小
-Xms:堆的初始化值
-Xmx:堆能达到的最大值

Java内存模型中堆和栈的区别—内存分配策略

静态存储:编译时确定每个数据目标在运行时的存储空间需求
栈式存储:数据区需求在编译时未知,运行时模块入口确定
堆式存储:编译时或运行时模块入口都无法确定,动态分配

在这里插入图片描述
管理方式:栈自动释放,堆需要GC
空间大小:栈比堆小
碎片相关:栈产生的碎片远小于堆
分配方式:栈支持静态和动态分配,而堆仅支持动态分配
效率:栈的效率比堆高

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public class InternDifference {
    public static void main(String[] args) {
        String s = new String("a");
        s.intern();
        String s2 = "a";
        System.out.println(s == s2);

        String s3 = new String("a")+ new String("a");
        s3.intern();
        String s4 = "aa";
        System.out.println(s3 == s4);
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值