JVM难学?那是因为你没认真看完这篇文章 (2)

单线程下无论栈帧太大还是栈容量太小,及引用深度超过虚拟机允许深度都会抛出StackOverflowError每个方法压入栈的帧大小是不一致的。多线程下当每个线程分配栈帧太大内存不能够扩展时抛出OutOfMemoryError异常线程栈帧越大,可创建的线程越少。

3.方法区参数

-XX:PermSize方法区内存最小值

-XX:MaxPermSize 方法区内存最大值

各个线程共享的内存区域,主要用来存储类的元数据、常量、静态变量、即时编译器编译后的代码等数据

例:-XX:PermSize=20M -XX:MaxPermSize=20M

异常类型 OutOfMemoryError :

原因:常量过多,或代理反射等使用频繁

4.本机直接内存参数

-XX:MaxDirectMemorySize

例:-XX:MaxDirectMemorySize=10M

不足时抛出OutOfMemory异常

四:垃圾收集算法

经典的垃圾回收算法以下几种

 一、标记--清除算法(Mark-Sweep)

回收前状态:

JVM难学?那是因为你没认真看完这篇文章

回收后状态:

 

JVM难学?那是因为你没认真看完这篇文章

优缺点:

算法执行分为两个阶段标记与清除,所有的回收算法,基本都

基于标记回收算法做了深度优化

缺点:效率问题,内存空间碎片(不连续的空间)

二、复制算法(Copying)

回收前状态:

Eden内存空间 8

JVM难学?那是因为你没认真看完这篇文章

Survivor1空间(From空间)1

 

JVM难学?那是因为你没认真看完这篇文章

Survivor2空间(To空间) 1

JVM难学?那是因为你没认真看完这篇文章

Eden内存空间与Survivor空间 8:1

 

JVM难学?那是因为你没认真看完这篇文章

回收后状态:

JVM难学?那是因为你没认真看完这篇文章

Survivor1空间(From空间)1

 

JVM难学?那是因为你没认真看完这篇文章

Eden内存空间与Survivor空间 8:1

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjfwy.html