从大的方面来讲,JVM的内存模型分为两大块:
永久区内存( Permanent space )和堆内存(heap space)。
栈内存(stack space)一般都不归在JVM内存模型中,因为栈内存属于线程级别。
每个线程都有个独立的栈内存空间。
Permanentspace里存放加载的Class类级对象如class本身,method,field等等。
heapspace主要存放对象实例和数组。
heapspace由Old Generation和New Generation组成,Old Generation存放生命周期长久的实例对象,而新的对象实例一般放在New Generation。
NewGeneration还可以再分为Eden区、和Survivor区,新的对象实例总是首先放在Eden区,Survivor区作为Eden区和Old区的缓冲,可以向Old区转移活动的对象实例。
没错,我们常见的OOM(out of memory)内存溢出异常,就是堆内存空间不足以存放新对象实例时导致。
永久区内存溢出相对少见,一般是由于需要加载海量的Class数据,超过了非堆内存的容量导致。通常出现在Web应用刚刚启动时,因此Web应用推荐使用预加载机制,方便在部署时就发现并解决该问题。
栈内存也会溢出,但是更加少见。
堆内存优化:
调整JVM启动参数-Xms -Xmx -XX:newSize -XX:MaxNewSize,如调整初始堆内存和最大对内存 -Xms256M-Xmx512M。 或者调整初始New Generation的初始内存和最大内存 -XX:newSize=128M -XX:MaxNewSize=128M。
永久区内存优化:
调整PermSize参数 如 -XX:PermSize=256M -XX:MaxPermSize=512M。
栈内存优化:
调整每个线程的栈内存容量 如 -Xss2048K
最终,一个运行中的JVM所占的内存= 堆内存 + 永久区内存 + 所有线程所占的栈内存总和 。
分享到:
相关推荐
同时,如果设备支持Java,用户也可以找到并安装Java版本的QQ,这对于那些无法运行Android应用或者希望节省内存的用户来说是个不错的选择。Java版QQ可能体积更小,但功能可能相对有限。 Android系统的另一个特点是其...
数据库的基础jva基础学习
jva完美学习版ppt刘华英
Jva API知识点.md
【标题】"SUPINFO_3JVA-SupSMS"指的是SUPINFO机构的3JVA项目中的一个名为SupSMS的部分。这个项目可能是一个基于Java技术的短信管理或通信系统,用于处理与短信服务相关的功能。 【描述】"3JVA-SupSMS SUPINFO 3JVA...
《Jva程序设计》课程标准.doc
实例40 压缩和解压文件 实例45 使用SMTP协议发送邮件 实例52 使用ODBC连接数据库 实例62 多线程 实例77 应用JAR包 实例87 JSP+BEAN的应用 实例99 连接数据库 实例100 上传文件
4JVA_SupRails_WS 具有SOAP和Rest Web服务的简单JEE应用程序。 带有GlassFish Server 3.1.2的NetBeans 7.4(不适用于GlassFish 4.0) 如何 : 1-复制回购2-使用NetBeans打开项目(与Eclipse不同,无需导入,只需...
java编写的经典俄罗斯方块游戏,可以拿来学习学习
18. **Java内存管理**:讨论Java的垃圾回收机制,理解堆内存和栈内存的区别,以及如何优化内存使用。 19. **性能优化与调试**:学习分析和优化Java程序性能的方法,使用JVisualVM等工具进行监控和调试。 通过每天...
在Java编程语言中,处理图像是一项常见的任务,其中包括图片的加载、显示、编辑以及保存等操作。本示例“Java-pictures-rotating-example”关注的是如何旋转图片,这是一个非常实用的功能,尤其在图片处理软件或者...
- **内存管理**:理解内存分配、垃圾收集机制,避免内存泄漏。 - **并发编程**:合理使用线程,避免过度竞争和死锁,利用并发库提升多核处理器利用率。 - **代码效率**:编写高效代码,避免不必要的计算和资源浪费,...
企业门户新闻网使用说明书 配置源程序 附加数据库SQL Server 2000 ... (2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在“数据库”数据项上单击鼠标右键,在弹出的快捷菜单中选择“所有任务”/...
不错的软件,值得下载的挺好用,不过可能下的时候有点卡,大家多看看啦。。。哈哈。。。。
顺序表是一种静态存储结构,它在内存中占用一段连续的空间,元素按顺序依次存储。在Java中,可以通过数组来实现顺序表。接口LList定义了顺序表的基本操作,如isEmpty()用于检查表是否为空,size()返回表的长度,get...
- Java虚拟机负责运行Java程序,理解内存模型、垃圾回收和性能优化对Java开发者至关重要。 通过深入学习这些知识点,Java程序员能够更好地应对面试,提升技能,并解决实际工作中遇到的问题。无论是初学者还是经验...
项目说明:项目通俗易懂,使读者快速了解项目,了解 Spring 核心原理。在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、...
此文档适合没有开发经验的小白们使用。
Java 2平台,标准版(J2SE)是Java编程语言的核心版本,它为开发桌面应用、服务器端软件和网络应用程序提供了基础。J2SE 5.0是这个平台的一个重要里程碑,它引入了许多关键的新特性,提升了Java的效率、可读性和可...