没有合适的资源?快使用搜索试试~ 我知道了~
JVM内存模型、堆与栈详解以及gc回收机制解析、回收方法.doc
需积分: 10 1 下载量 62 浏览量
2019-07-25
13:59:59
上传
评论
收藏 327KB DOC 举报
温馨提示
JVM内存模型、堆与栈详解以及gc回收机制解析、回收方法
资源推荐
资源详情
资源评论
一JVM 内存模型
1.1Java 栈
Java 栈是与每一个线程关联的,JVM 在创建每一个线程的时候,会分配一
定的栈空间给线程。它主要用来存储线程执行过程中的局部变量,方法的返回
值,以及方法调用上下文。栈空间随着线程的终止而释放。
StackOverowError:如果在线程执行的过程中,栈空间不够用,那么
JVM 就会抛出此异常,这种情况一般是死递归造成的。
1.2堆
Java 中堆是由所有的线程共享的一块内存区域,堆用来保存各种 JAVA 对
象,比如数组,线程对象等。
1.2.1Generation
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
剩余9页未读,继续阅读
资源评论
心肝宝贝甜蜜饯儿
- 粉丝: 87
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功