随笔分类 - 学习——JVM
摘要:http://blog.csdn.net/column/details/14851.html 地址记录
阅读全文
摘要:1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,
阅读全文
摘要:1. 内存分配图: 两栈一区一堆一计数方法区里面 包含了运行时常量2. 对象创建过程: new A() 首先加载A的字节码。 分配内存,内存分配方式分两种,如果采用带压缩的垃圾回收策略,则采用“指针碰撞”的方式分配(即空闲内存连续,直接移动指针); 如果采用非压缩的垃圾回收策略,则采用空闲列表的方式...
阅读全文
摘要:简单来说,对象内存分配主要是在堆中分配。但是分配的规则并不是固定的,取决于使用的收集器组合以及JVM内存相关参数的设定以下介绍几条基本规则(使用的ParNew+Serial Old收集器组合):一,对象优先在新生代Eden区分配[java]view plaincopy//-XX:+UseParNewGC-Xms20m-Xmx20m-Xmn10m-XX:+PrintHeapAtGC-XX:+PrintGCDetailspublicclasstest{staticintmb=1024*1024;publicstaticvoidmain(String[]args){byte[]b1=newbyte[
阅读全文
摘要:基本上 jvm内存回收有三种 基本算法标记-清除标记清除的算法最简单,主要是标记出来需要回收的对象,然后然后把这些对象在内存的信息清除。如何标记需要回收的对象,在上一篇文章里面已经有说明。标记-清除-压缩这个算法是在标记-清除的算法之上进行一下压缩空间,重新移动对象的过程。因为标记清除算法会导致很多的留下来的内存空间碎片,随着碎片的增多,严重影响内存读写的性能,所以在标记-清除之后,会对内存的碎片进行整理。最简单的整理就是把对象压缩到一边,留出另一边的空间。由于压缩空间需要一定的时间,会影响垃圾收集的时间。标记-清除-复制这个算法是吧内存分配为两个空间,一个空间(A)用来负责装载正常的对象信息
阅读全文
摘要:转载自:http://www.cnblogs.com/aigongsi/archive/2012/04/06/2434771.htmljava与C,c++有很大的不同就是java语言开发者不需要关注内存信息,不会显式的直接操作内存,而是通过jvm虚拟机来实现。java虚拟机运行的时候内存分配图如下图:jvm虚拟机栈:一个是线程独有的,每次启动一个线程,就创建一个jvm虚拟机栈,线程退出的时候就销毁。这里面主要保存线程本地变量名和局部变量值。本地方法栈: 调用本地jni方法的时候而创建的。这里分配的jvm之外的内存空间。方法调用结束之后销毁。pc寄存器 : 这个保存线程当前执行的字节码指令堆:主
阅读全文