千家信息网

如何进行JVM内存模型使用

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章给大家介绍如何进行JVM内存模型使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。你对JVM内存模型是否熟悉,这里和大家分享一下,主要包括栈和堆两部分内容,Java栈是与
千家信息网最后更新 2024年11月11日如何进行JVM内存模型使用

这篇文章给大家介绍如何进行JVM内存模型使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

你对JVM内存模型是否熟悉,这里和大家分享一下,主要包括栈和堆两部分内容,Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。它主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文。Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种JAVA对象,比如数组,线程对象等。

JVM内存模型

  1.1Java栈

Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。它主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文。栈空间随着线程的终止而释放。StackOverflowError:如果在线程执行的过程中,栈空间不够用,那么JVM就会抛出此异常,这种情况一般是死递归造成的。

1.2堆

Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种JAVA对象,比如数组,线程对象等。

1.2.1Generation

JVM内存模型中JVM堆一般又可以分为以下三部分:

◆Perm

Perm代主要保存class,method,filed对象,这部门的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及到热部署的应用服务器的时候,有时候会遇到java.lang.OutOfMemoryError:PermGenspace的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉,这样就造成了大量的class对象保存在了perm中,这种情况下,一般重新启动应用服务器可以解决问题。

◆Tenured

Tenured区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Young复制转移一定的次数以后,对象就会被转移到Tenured区,一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间。

◆Young

Young区被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Young区间变满的时候,minorGC就会将存活的对象移到空闲的Survivor区间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到Tenured区间。

1.2.2SizingtheGenerations参考资料:

JVM内存模型中提供了相应的参数来对内存大小进行配置。正如上面描述,JVM中堆被分为了3个大的区间,同时JVM也提供了一些选项对Young,Tenured的大小进行控制。

◆TotalHeap

-Xms:指定了JVM初始启动以后初始化内存

-Xmx:指定JVM堆得***内存,在JVM启动以后,会分配-Xmx参数指定大小的内存给JVM,但是不一定全部使用,JVM会根据-Xms参数来调节真正用于JVM的内存参考资料:

-Xmx-Xms之差就是三个Virtual空间的大小

◆YoungGeneration

-XX:NewRatio=8意味着tenured和young的比值8:1,这样eden+2*survivor=1/9

堆内存

-XX:SurvivorRatio=32意味着eden和一个survivor的比值是32:1,这样一个Survivor就占Young区的1/34.

-Xmn参数设置了年轻代的大小

◆PermGeneration

-XX:PermSize=16M-XX:MaxPermSize=64M

ThreadStack

 -XX:Xss=128K

1.3堆栈分离的好处

其它的先不说了,就来说说面向对象的设计吧,当然除了面向对象的设计带来的维护性,复用性和扩展性方面的好处外,我们看看面向对象如何巧妙的利用了堆栈分离。如果从JAVA内存模型的角度去理解面向对象的设计,我们就会发现对象它***的表示了堆和栈,对象的数据放在堆中,而我们编写的那些方法一般都是运行在栈中,因此面向对象的设计是一种非常***的设计方式,它***的统一了数据存储和运行。

关于如何进行JVM内存模型使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

对象 内存 线程 模型 大小 空间 区间 方法 设计 参数 时候 内容 过程 部分 分配 参考 存储 上下 上下文 区域 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 国际服是一个服务器 计算机网络技术1 x 软件开发开票单位写什么科目 数据库中不存在此触发涵数 网络安全方面有什么法律 航途网络安全总公司 福州直播电商软件开发 马云背后的男人网络安全 电脑服务器网卡启动 经济学与网络安全交叉领域有哪些 局 网络安全自查总结报告 见面课网络安全与伤害 数据库 邮件提醒 方舟服务器管理员命令 私有云登录服务器无法连接 驿唐科技工业互联网宝 百度云文件管理服务器 西安一码通大数据库的电话多少 网络安全质检员是学什么的 监控管理服务器为啥要收费 2021网络安全发展趋势 计算机网络技术对应的岗位 湖州系统软件开发项目 数据库原理范式模拟题 金牛区零点软件开发有限公司 天津精英网络技术咨询成交价 苹果软件开发打开 网络安全 前沿 问答 酷通加速服务器app下载 一呼百应网络技术公司怎么样
0