1、内存(OutOfMemoryError、stackOverflowError)
区别 |
程序计数器
| jvm栈 |
堆内存
|
方法区(包含常量池) |
本地方法栈
|
作用
| 较小内存空间,存放当前线程执行字节码的行号指示器 | 栈帧:局部变量(基本类型、引用、方法返回地址)、操作数栈、动态连接、方法出口 |
内存最大、存放对象实例(分年轻代、老年代)
| 存储虚拟机加载的信息:类名、访问修饰符、常量池、字段描述、方法描述、静态变量等 |
与jvm栈类似(jvm栈为虚拟机执行java方法、本地方法栈为虚拟机调用操作系统本地方法)
|
线程 | 私有 | 私有 | 共享 | 共享 | HotSpot将jvm栈和本地方法栈合并 |
内存异常 |
没有规定
| 1、stackOverflowError异(单线程请求栈深度大于虚拟机所允许的深度) 2、OutOfMemoryError异常(动态扩展时无法申请到足够内存) |
OutOfMemoryError异常:堆中没有内存完成实例分配且堆内存无法扩展时 |
OutOfMemoryError |
stackOverflowError OutOfMemoryError |
内存优化
|
|
-Xss
(最近128KB、通常512KB)
|
-Xmx/-Xms
(默认物理内存
1/64、8:1:1)
|
-XX:PermSize(64KB)
-XX:MaxPermSize(64KB) |
|
工具:jvisualvm