1.虚拟机分配的运行时数据区

JVM理解(一)
(图源深入理解java虚拟机 以下同上)
其中方法区域:线程共享,存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等等。(HotSpot虚拟机上开发部署人员更愿意成为“永久代”,Permanent Generation)。


2.对象访问的两种方式

使用句柄和直接指针
JVM理解(一)

JVM理解(一)

3.堆溢出

对象不能被回收

4.虚拟机栈和本地方法栈溢出

HotSpot不区分这两个区域
有两种可能:
  1.线程请求栈深度大于虚拟机所允许的最大深度  StackOverflowError
  2.虚拟机在扩展栈时无法申请到足够的内存空间 OutofMemoryError
单线程深度一般来说可以达到要求 建立过多线程有可能导致内存溢出

5.运行时常量池溢出

String.intern()方法 如果常量池中有一个等于此String对象的字符串 则返回代表池中这个字符串的String对象;否则将此String对象包含的字符串添加到常量池中,并且返回此String的引用 (常量池分配在方法区内)

6.方法区溢出

方法区用于存放Class的相关信息 如类名,访问修饰符,常量池,字段描述,方法描述等

7.本机直接内存溢出

直接内存并不是虚拟机运行时数据区的一部分也不是Java虚拟机规范中定义的内存区域 是基于通道(Channel)于缓冲区(Buffer)的IO方式使用的Native函数库直接分配堆外内存 然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。


相关文章:

  • 2022-12-23
  • 2021-04-17
  • 2021-04-13
  • 2021-11-30
  • 2021-08-17
  • 2021-12-10
  • 2021-08-15
猜你喜欢
  • 2021-09-09
  • 2021-06-19
  • 2022-01-10
  • 2021-04-06
  • 2021-04-27
  • 2021-07-24
相关资源
相似解决方案