摘要:
概述 如果对象在Eden出生并经过第一次Minor GC后依然存活,并且能被Survivor容纳的话,将被移动到Survivor空间中,把那个将对象年龄设为1,对象在Survivor区中每熬过一次MinorGC,年龄就增加一岁,当它的年龄增加到一定程度(默认15岁,其实每个JVM、每个GC都有所不同 阅读全文
摘要:
分类 针对hotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC) 部分收集:不是完整收集整个Java堆的垃圾收集。其中又分为: 新生代收集(Minor GC/Young GC):只是新生代的垃圾收集 老年代收集( 阅读全文
摘要:
一般情况 new的对象先放伊甸园区,此区有大小限制 当伊甸园的空间填满时,程序又需要创建对象,出发GC(Minor GC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。再加载新的对象放到伊甸园区 然后将伊甸园中的剩余对象移动到幸存者0区 如果再次触发垃圾回收,此时上次幸存下来的放到幸存者0区的 阅读全文
摘要:
概述 存储在JVM中的java对象可以被划分为两类: 一类是生命周期较短的瞬时对象,这类对象的创建和消亡都非常迅速 另外一类对象时生命周期非常长,在某些情况下还能与JVM的生命周期保持一致 Java堆区进一步细分可以分为年轻代(YoungGen)和老年代(OldGen) 其中年轻代可以分为Eden空 阅读全文
摘要:
设置 Java堆区用于存储java对象实例,堆的大小在jvm启动时就已经设定好了,可以通过 "-Xmx"和 "-Xms"来进行设置 -Xms 用于表示堆的起始内存,等价于 -XX:InitialHeapSize -Xms 用来设置堆空间(年轻代+老年代)的初始内存大小 -X 是jvm的运行参数 ms 阅读全文
摘要:
概述 一个进程对应一个JVM实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间 阅读全文
摘要:
本地方法接口 简单来讲,一个Native Method就是java调用非java代码的接口,一个Native Method 是这样一个java方法:该方法的实现由非Java语言实现,比如C。这个特征并非java特有,很多其他的编程语言都有这一机制,比如在C++ 中,你可以用extern “C” 告知 阅读全文
摘要:
本地方法栈 Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用 本地方法栈,也是线程私有的。 允许被实现成固定或者是可动态拓展的内存大小。(在内存溢出方面是相同的) 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOverFlow 阅读全文
摘要:
Q:举例栈溢出的情况?(StackOverflowError) A:递归调用等,通过-Xss设置栈的大小 Q:调整栈的大小,就能保证不出现溢出么? A:不能,如递归无限次数肯定会溢出,调整栈大小只能保证溢出的时间晚一些 Q:分配的栈内存越大越好么? A:不是 会挤占其他线程的空间 Q:垃圾回收是否会 阅读全文
摘要:
每个栈帧中包含: 局部变量表(Local Variables) 操作数栈(Opreand Stack) 或表达式栈 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用) 动态返回地址(Return Address) (或方法正常退出或者异常退出的引用的定义) 一些附加信息 一 阅读全文