JVM内存基本理解
声明:本文内容仅作为本人方便记忆和查看所用。
JVM有五块内存空间:
1、method area:用于存储已被加载的类信息、常量、静态变量、即时编译后的代码等数据。
注:在JDK8中,Method Area(方法区)即PermGen(永久代)已经废弃,取而代之的是Metaspace(元空间);Metaspace的性质与Method Area基本类似,他们的本质区别是Metaspace不在虚拟机中,而是使用本地内存,理论上取决于32位/64位系统可虚拟的内存大。
2、heap:一般存放对象实例。
3、native method stack:作用和VM stack类似。
4、program counter register:当前线程执行字节码文件行号指示器,是唯一没有OutOfMemoryError的区域。
5、vm stack:每个方法在执行的时候都会创建一个栈帧,用于存放局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用到结束对应着stacks中入栈到出栈的过程。
其中1和2为线程共享数据区,其他为线程隔离数据区。
虚拟机创建对象:
1、heap中内存规整,则使用bump the pointer(指针碰撞);一般这种方式下GC为Serial、Palnew等带有compact过程。
2、heap中内存不规整,则必须维护一张表记录哪些内存可用,在分配的时候找到一块足够大的内存,并且更新该表,这种方式称为free list(空闲列表);一般这种方式下GC为CMS这种基于Mark-Sweep。
heap是否规整取决于GC方式是否带compact功能。
修改指针线程安全问题解决:
1、对分配内存空间时做同步处理,实际上虚拟机采用CAS配上失败重试的方法保证更新操作的原子性。
2、把内存分配的操作按照线程划分的不同的空间中,即每个线程在heap中预先分配一小块内存,称为本地线程分配缓冲,内存分配完之后需要将该内存初始化为零值,然后虚拟机对对象进行必要的设置。
GC:
young generation(minor GC):大部分对象在创建之后很快就会变得不可达。包含eden和survivor区。
old generation(major GC or full GC):对象没有不可达,从新生代存活下来,被复制到老年代。
card table:用来表示老年代某一区域中的所有对象是否持有对新生代对象的引用。这样新生代在GC的时候不需要花大量时间扫描所有老年代对象来确定对象的引用关系。
GC方式:
Serial GC:单线程收集器;Serial old是针对老年代的收集器
Parnew GC:Serial 新生代的多线程实现
Parallel :采用复制算法的多线程新生代收集器,主要关注目标是吞吐量
Parallel old(Parallel Compacting GC (JDK1.6后)):使用多线程和标记整理算法的老年代收集器
Concurrent Mark & Sweep GC(CMS):应用广泛,以获取最短停顿时间为目的;以标记清除算法为基础,会产生大量的空间碎片;为解决这个问题,默认提供-XX:+UseCMSCompactAtFullCollection收集开关参数(默认开启),用于在full GC完开启内存碎片的整理过程;还提供另外一个参数-XX:CMSFullGCsBeforeCompaction用于设置执行多少次不压缩full GC后跟着来一次带压缩的(默认次数为0)
GC ROOTS:
虚拟机栈中的引用对象
方法区中类静态属性引用的对象
方法区中常量引用的对象
Native的引用对象
GC 算法:
标记清除:问题是容易产生大量的空间碎片,提前触发full GC
标记整理:老年代算法;先标记,再压缩,后清除
复制算法:新生代算法
增量算法:垃圾收集线程和应用程序线程交替运行;优点:减少系统停顿时间;缺点:因为线程切换和上下文转换的消耗,使得垃圾回收总成本上升,造成系统吞吐量下降。
JVM内存基本理解的更多相关文章
- JVM内存简单理解
1.首先简单说一下CPU与内存之间的关系 CPU运转速度快,磁盘的读写速度远远不及CPU运转速度,所以设计了内存来缓冲CPU等待磁盘读写:随着CPU的发展,内存读写也远远跟不上CPU的读写速度,CPU ...
- JVM 内存机制理解【转自http://www.cnblogs.com/dingyingsi/p/3760447.html】
我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等 ...
- 走进JVM【二】理解JVM内存区域
引言 对于C++程序员,内存分配与回收的处理一直是令人头疼的问题.Java由于自身的自动内存管理机制,使得管理内存变得非常轻松,不容易出现内存泄漏,溢出的问题. 不容易不代表不会出现问题,一旦内存泄漏 ...
- 深入理解JVM(一)——JVM内存模型
JVM内存模型 Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区. ...
- 你应该这样理解JVM内存管理
在进行Java程序设计时,一般不涉及内存的分配和内存回收的相关代码,此处引用一句话: Java和C++之间存在一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外的人想进去,墙里面的人想出来 ,个人从这 ...
- 深入理解JVM内存区域与内存分配
前言:这是一篇关于JVM内存区域的文章,由网上一些有关这方面的文章和<深入理解Java虚拟机>整理而来,所以会有些类同的地方,也不能保证我自己写的比其他网上的和书本上的要好,也不可能会这样 ...
- 如何从编程的本质理解JVM内存模型
如何从编程的本质理解JVM内存模型 一般聊JVM内存模型都是把图截出来,然后对着图,解释上面堆.栈之类的概念.这篇将分享下,如何从编程的本质上理解,JVM内存模型是什么样子,为什么是这个样子,不再死记 ...
- 深入理解JVM之JVM内存区域与内存分配
深入理解JVM之JVM内存区域与内存分配 在学习jvm的内存分配的时候,看到的这篇博客,该博客对jvm的内存分配总结的很好,同时也利用jvm的内存模型解释了java程序中有关参数传递的问题. 博客出处 ...
- 深入理解java虚拟机学习笔记(一)JVM内存模型
上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要 ...
随机推荐
- 阿里云ECSLinux系统下挂载磁盘
最近公司服务器老是提示磁盘空间不足,原因是以前的业务负责人开了Tomcat的debug日志并且没有做日志轮询,所以日志量非常大.当我做了日志切割轮询后发现磁盘还是太小才40G,按理外网服务器怎么可能这 ...
- php empty,isset,is_null判断比较(差异与异同)
php empty,isset,is_null判断比较(差异与异同) 作者: 字体:[增加 减小] 类型:转载 做php开发时候,想必在使用:empty,isset,is_null 这几个函数时候,遇 ...
- oracle sql语句学习(一)
oraclexe 11.0.2.0 输出到文件 SQL>spool /*完整路径*/; SQL>spool off; 多表自然链接 select spj.sno from spj join ...
- ZJNU 1542 - 三角形(续)--中高级
从小到大排序后 先固定一遍,另外两边递增查找 即固定 i,j=i+1,k=j+1 然后让k递增到 a[i]+a[j]<=a[k] 时 此时不能凑成一个三角形 答案增加 k-1-j 组 此时不需要 ...
- JavaEE--分布式对象
参考:http://blog.csdn.net/smcwwh/article/details/7080997 1.客户与服务器的角色 所有分布式编程技术的基本思想都很简单:客户计算机产生一个请求,然后 ...
- SQL: all 运算符 可以 表示 非空(NOT NULL)的意思吗?
select count(all grade) from customer; SELECT COUNT(DISTINCT customer_id) FROM customer WHERE grade ...
- jquery.marquee.js - 有点奇怪的跑马灯动画,不过还是加上去了
客户想要一个跑马灯的效果,最终我用了jquery.marquee.js. 这个库很简单就能用. 效果是这样,从左到右,移动速度都不一样. 1. HTML <div class="mar ...
- lr cc安装后提示“内部出现错误,无法创建文件夹”的解决办法
好多人在使用lr过程中提示“内部出现错误,无法创建文件夹”,今天MacW小编给大家带来了解决的方法,一起来看看吧! 1.此问题主要是用户权限的问题. 下载这个shell 脚本,此 shell 脚本可自 ...
- 吴裕雄--天生自然 JAVA开发学习:异常处理
try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 } import java.io.*; public class ExcepTest{ publi ...
- 14 微服务电商【黑马乐优商城】:day06-使用nginx反向代理并掌握cors解决跨域
本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...