jvm
文章平均质量分 77
ghostwuxiao
之前维护五年的博客账号异常(问号脸)?无奈,重新开一个博客
展开
-
jvm 内存管理-运行时数据区域
jvm在执行java程序时,会把所管理的内存分为几个不同的数据区域,每个区域有不同的用途,以及创建销毁的时间。 <java虚拟机规范>规定,JVM所管理的内存包括几个运行时数据区域 方法区 被所有线程共享,用于存储被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码, 方法区无法满足内存分配需求,outo...原创 2018-07-16 14:56:03 · 241 阅读 · 0 评论 -
GC日志分析
垃圾收集器在进行垃圾收集的过程中,可以输出日志,我们通过日志,可以看到当前垃圾收集器的运行情况。通过gc日志,我们可以观察垃圾收集器的行为,以及当前应用程序的GC情况和内存使用情况。学会查看和分析垃圾收集日志,一方面可以帮助我们学习垃圾收集器;另一方面,在必要的时候,可以帮助我们定位问题,解决问题,对JVM进行优化。 默认,JVM不会打印出GC日志信息,可以通过参数-XX:+PrintGC或...转载 2018-07-24 15:06:13 · 941 阅读 · 1 评论 -
jvm gc收集器
单线程GC收集器包括Serial和SerialOld这两款收集器,分别用于年轻代和老年代的垃圾收集工作。多线程收集器还包括Parallel Scavenge和ParallelOld收集器,这两款也分别用于年轻代和老年代的垃圾收集工作,不同的是,它们是两款可以利用多核优势的多线程收集器。相对来说更加复杂的还有CMS收集器。这款收集器,在运行的时候会分多个阶段进行垃圾收集,而且在一些阶段是...转载 2018-07-24 15:03:02 · 212 阅读 · 0 评论 -
HotSpot的算法实现
1.枚举根节点 从可达性分析中从GC Roots节点找引用为例,可作为GC Roots的节点主要是全局性的引用与执行上下文中,如果要逐个检查引用,必然消耗时间。 另外可达性分析对执行时间的敏感还体现在GC停顿上,因为这项分析工作必须在一个能确保一致性的快照中进行——这里的“一致性”的意思是指整个分析期间整个系统执行系统看起来就行被冻结在某个时间点,不可以出现分析过程中对象引用关系还在不断变化的...转载 2018-07-24 14:42:25 · 239 阅读 · 0 评论 -
jvm性能监控工具
jps:JVM机进程状况工具:用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等jps:显示指定系统内所有的HotSpot虚拟机进程.用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等 jps -q:只输出LVMID,省略主类的名称 -m:输出虚拟机进程启动时传递给主类main()函数的参数 -...原创 2018-07-17 17:18:53 · 152 阅读 · 0 评论 -
jvm-垃圾收集算法
标记-清除分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,标记完成后统一回收所有被标记的对象。这种算法的不足主要体现在效率和空间,从效率的角度讲,标记和清除两个过程的效率都不高;从空间的角度讲,标记清除后会产生大量不连续的内存碎片, 内存碎片太多可能会导致以后程序运行过程中在需要分配较大对象时,无法找到足够的连续内存而不得不提前触发一次垃圾收集动作。复制算法 复制算...原创 2018-07-17 14:57:22 · 107 阅读 · 0 评论 -
jvm GC算法
哪些区域需要GC?jvm内存中,程序计数器,栈的内存分配在编译器可知,是属于线程私有区域,方法结束或者线程结束时,内存回收。堆和方法区内存在程序运行器才知道,内存分配和回收是动态的。判断对象需要被回收?引用计数算法:一个地方引用,计数器加1,引用失效,计数器-1,计数器为0,不可用。jvm较少用这类算法,因为这种算法很难解决对象之间相互引用的情况 可达性分析算法:“GC Root...原创 2018-07-17 14:40:25 · 342 阅读 · 0 评论 -
jvm 内存管理-常见异常 OutOfMemoryError
OutOfMemoryErrorjvm内存中,除程序计数器外,堆,栈(本地方法栈,虚拟机栈),方法区,都会存在OutOfMemoryError,也就是常说的OOM。堆溢出:不断创建对象,且GC Roots 到对象之间有可达路径,对象不会被GC,对象数量达到堆最大容量限制时候出现OOM,紧接着会出现java heap space 错误。在JVM中如果98%的时间是用于GC且可用的 Hea...原创 2018-07-17 11:55:49 · 270 阅读 · 0 评论 -
jvm 内存管理-hotspot虚拟机对象内存布局和访问定位
内存布局在hotspot虚拟机中,对象在内存存储布局分为3块:对象头,实例数据,对齐填充对象头包括两部分信息:存储对象自身的运行时数据:哈希码,GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳 类型指针:对象指向类元数据的指针,虚拟机通过该指针确定对象是哪个类的实例。 如果是数据,对象头还需有一块记录数组长度的内存(普通java对象可通过元数据确定对象大小,数组不行...原创 2018-07-17 11:20:32 · 293 阅读 · 0 评论 -
jvm 内存管理-hotspot虚拟机对象创建
创建对象通常是new 来完成 虚拟机收到一条new指令,首先检查该指令的参数能否在常量池定位到一个类的符号引用,并检查符号引用代表的类,是否已被加载,解析,初始化,如没有,先执行相应的类加载过程。 类加载检查通过后,虚拟机为新生对象分配内存,对象所需内存大小在类加载完成后可完全确定。 对象分配空间:把一块确定大小的内存从jav...原创 2018-07-16 20:24:56 · 143 阅读 · 0 评论 -
JVM-内存分配与回收策略
对象的内存分配,往大的方向上讲,就是在堆上分配,少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节决定于当前使用的是哪种垃圾收集器组合,当然还有虚拟机中与内存相关的参数。垃圾收集器组合一般就是Serial+Serial Old和Parallel+Serial Old,前者是Client模式下的默认垃圾收集器组合,后者是Server模式下的默认垃圾收集器组合。TLAB...原创 2018-07-24 15:19:13 · 194 阅读 · 1 评论