Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

深入理解 Java 虚拟机 #2

Open
zhangwt-cn opened this issue Feb 2, 2023 · 1 comment
Open

深入理解 Java 虚拟机 #2

zhangwt-cn opened this issue Feb 2, 2023 · 1 comment
Assignees
Labels
Java Java JVM Java Virtual Machine

Comments

@zhangwt-cn
Copy link
Owner

zhangwt-cn commented Feb 2, 2023

深入理解Java虚拟机阅读

@zhangwt-cn zhangwt-cn mentioned this issue Jun 28, 2023
12 tasks
@zhangwt-cn zhangwt-cn transferred this issue from zhangwt-cn/zhangwt-cn Jun 28, 2023
@zhangwt-cn zhangwt-cn self-assigned this Jun 28, 2023
@zhangwt-cn zhangwt-cn added Java Java JVM Java Virtual Machine labels Jun 28, 2023
@zhangwt-cn
Copy link
Owner Author

zhangwt-cn commented Jul 2, 2023

第二章

  1. JVM 运行时数据区如何划分
graph TB
RuntimeDataArea[Runtime Data Area] --> JaveHeap[Java Heap]
JaveHeap[Java Heap] --> 字符串常量池[字符串常量池]
JaveHeap[Java Heap] --> 对象和数组实例数据[对象和数组实例数据]
RuntimeDataArea[Runtime Data Area] --> DirectMemory[DirectMemory]
DirectMemory[DirectMemory] -->  NIO操作[ NIO 操作]
RuntimeDataArea[Runtime Data Area] --> MetaSpace[Meta Space ]
MetaSpace[Meta Space ] -->  类的相关信息[ 类的相关信息]
类的相关信息[类的相关信息] --> 类名[类名]
类的相关信息[类的相关信息] --> 访问修饰符[访问修饰符]
类的相关信息[类的相关信息] --> 常量量池[常量池]
类的相关信息[类的相关信息] --> 字段描述[字段描述]
类的相关信息[类的相关信息] --> 方法描述[方法描述]
RuntimeDataArea[Runtime Data Area] --> VmStack[Vm Stack]
RuntimeDataArea[Runtime Data Area] --> NativeMethodStack[ Native Method Stack]
RuntimeDataArea[Runtime Data Area] --> Register[Register]
               
Loading
  • Java Heap 和 Meta Space 线程共同使用,其余区域是线程私有;
  • Vm Stack
    存储 Java 方法运行信息,例如局部变量表,对象引用等,HotSpot 不区分Native Method Stack 和 Vm Stack。
    -Xss 设置栈大小,栈容量最小值可能受到操作系统内存分页大小的限制,在分配内存时JVM会系统内存分页大小为基本单位,如果小于操作系统分页大小就无法设置成功。
  • Meta Space
    存放类加载所需要的东西,常量 含义是不变的东西
  • Register
    Register 是用来记录下一步操作内容,线程私有,多线程切换时恢复
  1. Jvm 中对象构成
graph TB
内存布局[内存布局] -->  Header[Header]
Header[Header] --> 类型指针[类型指针]
Header[Header] --> MarkWord[Mark Word]
内存布局[内存布局]  --> 填充数据[填充数据]
内存布局[内存布局]  -->  实例数据[实例数据] 
内存布局[内存布局]  -->  数组长度[数组长度]               
Loading
  • Mark Word
    hotspot源码
    Mark Word 记录哈希码、锁信息、GC年龄等,Mark Word内容会随着对象状态变化。
    JDK 高版本Mark Word 与JDK 8 有所不同

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Java Java JVM Java Virtual Machine
Projects
None yet
Development

No branches or pull requests

1 participant