【JVM】内存管理

2.内存管理

JVM规范中指定运行时数据去分为以下几块,方法区、堆、程序计数器、虚拟机栈、本地方法栈。其中方法区、堆是所有线程共享的,而程序计数器、虚拟机栈、本地方法栈是线程私有的。

    

2.1 内存分配

线程共享? jvm规范 hotspot实现 存放内容 可能异常 hotspot选项控制
共享 方法区 永久代

存放加载的

类信息包含常量池、静态变量

OutOfMemoryError: PermGen space 

-XX:MaxPermSize=64m
堆 

堆-年轻代

堆-老年代

对象&数组,

最大的一块内存

gc管理的主要区域

OutOfMemoryError:

Java heap space

-Xms128m

-Xmx700m

-XX:NewRatio=2

私有 PC程序计数器 PC程序计数器 下一条字节码指令地址 不会发生内存溢出  
虚拟机栈 执行java字节码的栈 StackOverflowError -Xss
本地方法栈 JNI调用的执行机器码栈帧

永久代包含类信息和常量池,运行时常量池是每个类或者接口的类文件中的常量池的运行时内存存储区域,常量池保存代码中的字面量、类名等,如一行String str = "123";"123"和"java.lang.String"等等常量。

 

 堆

HotSpot虚拟机为了把GC分代收集扩展至方法区,堆进一步划分为

2.2 创建一个对象涉及的内存  

1.堆中部分

对象内存透视,一个对象包含对象头实例实属对象头又包含Mark Word元数据指针。

Mark Word 是个位图,每一位都标识

未锁定的状态

2.2 垃圾回收

 
发布了92 篇原创文章 · 获赞 14 · 访问量 5815

猜你喜欢

转载自blog.csdn.net/sarafina527/article/details/103727963
今日推荐