美文网首页
1.认知Java虚拟机

1.认知Java虚拟机

作者: _少年不知愁 | 来源:发表于2020-12-28 09:40 被阅读0次

1.jdk结构

1.jdk(Java Development Kit)包含Java工具,Java基础的类库和jre
jre(Java Runtime Enviromental)包含核心类库和jvm
jvm(Java Virtual Mechinal)

image.png
jdk 版本下载

2.java是跨平台的语言

image.png

3.核心(jvm整体结构和内存模型)

image.png

4.hotSpot虚拟机对象探秘

参考 见深入java虚拟机第二章的2.3

4.1 对象的创建

1.对象创建方式:
使用new关键字,使用Class的newInstance方法,使用Constructor类的newInstance方法,使用clone方法,
使用反序列化;
2.创建过程
虚拟机遇到new指令,首先去检查这个符号引用的的类是否被加载,解析和初始化,类加载通过后分配内存空间。
若Java堆中内存是绝对规整的,使用“指针碰撞“方式分配内存;如果不是规整的,就从空闲列表中分配,
叫做”空闲列表“方式;
划分内存时还需要考虑一个问题-并发,也有两种方式: CAS同步处理,或者本地线程分配缓冲
(Thread Local Allocation Buffer, TLAB)。
然后内存空间初始化操作,接着是做一些必要的对象设置(元信息、哈希码…),最后执行<init>方法

4.2 对象内存布局

大致分成三块区域:对象头 实例数据 和对齐填充

1.对象头
第一部分,Mark word,用于存储对象自身运行时的数据,
如哈希码,gc分代年龄,锁状态标志,线程持有锁,偏向线程id,偏向时间戳
另一部分类型指针,即对象指向它的类元数据的指针,(用于确定对象类型)

2.实例数据

3.对齐填充
对象字节是否能被8整除,否则自动填充到能被8整除

4.3 对象访问定位

指程序需要通过JVM上栈的引用访问堆中的具体对象;

主要使用句柄池和直接指针;

Java堆中划分出一块内存来作为句柄池,引用中存储对象的句柄地址,而句柄中包含了对象实例数据对象类型数据各自的具体地址信息,具体构造如下图所示

访问定位-句柄池.jpg
访问定位-直接指针.jpg

相关文章

  • 1.认知Java虚拟机

    1.jdk结构 1.jdk(Java Development Kit)包含Java工具,Java基础的类库和jre...

  • java虚拟机 —— 垃圾回收机制

    1. 什么是java虚拟机 java虚拟机我们简称(jvm) 是java virtual machine 的简写,...

  • java

    1. java介绍 jre: java运行环境. jre=java 虚拟机+核心内裤(辅助java虚拟机运行的文...

  • java高级

    java 高级 java 虚拟机 1. java虚拟机进程停止的条件: - System.exit(int s...

  • 1.深入java虚拟机

    3.JVM 1.虚拟机? 可以执行java字节码的虚拟机进程, .java文件经过编译成能被java虚拟机执行的....

  • 初识Java虚拟机

    1.什么是Java虚拟机 Java虚拟机(JVM是运行Java字节码的虚拟机)。JVM有针对不用系统的特定实现(W...

  • Java面试2019基础题目汇总一

    一、JAVA基础篇-概念 1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机...

  • [Java面试系列] 基础篇01期

    1. 什么是 Java 虚拟机(JVM)?为什么 Java 被称作是“平台无关的编程语言”? Java 虚拟机是一...

  • java基础知识总结1-10

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字...

  • Java常考面试题(一)

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? java虚拟机是一个可以执行java字节...

网友评论

      本文标题:1.认知Java虚拟机

      本文链接:https://www.haomeiwen.com/subject/dbvzjqtx.html