jvm
2025-01-06 23:44:23 0 举报
jvm内存模块
作者其他创作
大纲/内容
Survivor
线程私有
局部变量表
获取运行类的类加载器也就是AppClassLoader
C++会发起调用
字符串常量池
30
年轻代
-XX:-HandlePromotionFailure
hello
a
调用classLoader加载要运行的类
intern()
B
应用类加载器
c=30
Eden8/10
java程序运行结束
否
he
新对象
物理内存
对象
Major GC
Eden分配
解析
launcher.getClassLoader()
CAS
操作数栈
Y
S01/10
N
Minor GC
运行时数据区
new X()
是
双亲委派机制
A
classLoader.loadClass()的详细过程
堆
Card Page
自定义类加载器
com.learn.jvm.Math.java
TLAB分配
线程栈
方法出口
字节码执行引擎
实例数据
b
main线程
com.zte.Test.java
ServerClassLoader
栈(线程)
String pool
Suivivor2
Full GC
a=1
main方法()
WebAppClassLoader
记忆集Remember Set
动态链接
程序计数器
获取launcher实例com.misc.Launcher.getLauncher()
方法区 - 字符串常量池
执行<init>
b=2
栈帧
向上检查
java
空闲列表
windows指令码
0x76
老年代 2/3
MarkWord
未配置
类是否已加载
老年代
Test线程
classLoader.loadClass(\"com.zte.Test\")
this
JVM不同版本的JVM将class文件编译成不同环境的机器码从软件层面屏蔽不同操作系统在底层和指令上的区别
HelloWorld.class
分配内存
pop
HelloWorld.java
对齐填充
老年代剩余内存空间 < 年轻代现有对象
线程栈-Xss
CardTable
compute方法-栈帧
CatalinaClassLoader
llo
linux
堆-Xms-Xmx
S11/10
配置
内存指针
加载类
new指令创建的
向下加载
向上委托
方法区
add方法-栈帧
加载
本地方法栈
TLAB
初始化
start
com.zte.Test.class
栈
Minor GC之前
内存分配方式
jvm销毁
JDK1.7
验证
new Math()
运行时数据区(Runtime Data Area)
Test.class
使用
对象头
\"abc\"
如果没有在启动参数中指定MaxNewSize及NewRatio等参数时,年轻代大小的计算策略是取1/3堆大小和CPU核心数*64M中的较小值,如果显式配置了NewRatio等相关参数时则会按照显式配置来计算大小
修改
linux指令码
windows
老年代剩余的内存空间 < 历史每次进入老年代对象的大小平均值
扩展类加载器
引导类加载器
字面量创建的字符串对象
创建bootstrap classloader器实例(C++实现)
Klass Point
JDK1.6
end
Tomcat类加载器
线程2
类加载检查
内存指针移动对象的大小
math
Math.class
Survivor1
字符串实例\"abc\"
线程共享
栈内分配
javac
6
JVM
Eden-Xmn
d=6
指针碰撞
准备
编译
age
大对象
类文件加载子系统
设置对象头
CommonClassLoader
main方法-栈帧
方法区-XX:MataspaceSize-XX:MaxMataspaceSize
数组长度
c=3
1
0 条评论
下一页