当前位置: 首页 > news >正文

做网站维护有前途吗wordpress 主题 汉化教程

做网站维护有前途吗,wordpress 主题 汉化教程,谷歌浏览器中文手机版,做网站服务器租一年多少钱文章目录 Java对象内置结构1.Java对象的三个部分1.1.对象头1.2.对象体1.3.对齐字节 2.对象结构中核心字段的作用2.1.MarkWord(标记字)2.2.Class Pointer(类对象指针)2.3.Array Length(数组长度)2.4.对象体2.5.对齐字节 3.Mark Word的结构信息3.1.不同锁状态下的Mark Word字段结… 文章目录 Java对象内置结构1.Java对象的三个部分1.1.对象头1.2.对象体1.3.对齐字节 2.对象结构中核心字段的作用2.1.MarkWord(标记字)2.2.Class Pointer(类对象指针)2.3.Array Length(数组长度)2.4.对象体2.5.对齐字节 3.Mark Word的结构信息3.1.不同锁状态下的Mark Word字段结构3.2.Mark Word的构成 4.使用JOL工具查看对象的布局4.1.引入依赖4.2.编写对象布局分析的测试代码4.3.输出结果解读4.4.大小端问题 5.Java中的内置锁5.1.无锁状态5.2.偏向锁状态5.3.轻量级锁状态5.4.重量级锁状态 Java对象内置结构 Java对象很多重要信息都存放在对象结构中在学习Java内置锁之前先来了解一下Java对象结构 1.Java对象的三个部分 1.1.对象头 对象头一共包括三个字段【Mark Word】【Class Pointer】【 Array Length】 MarkWord(标记字)用于存储自身运行时的一些数据例如GC标志位哈希码锁状态等信息。Class Pointer(类对象指针)用于存放此对象的元数据InstanceKlass的地址虚拟机可以通过此指针确当这个对象是那个类的实例Array Length(数组长度)如果对象是一个Java数组那么此字段必须有用于记录数组长度的数据如果不是数组那么此字段不存在 1.2.对象体 对象体包含了对象的实例变量成员变量用于成员属性值包括父类的成员属性值这部分内存按照4字节对齐 1.3.对齐字节 对齐字节Alignment Byte是为了优化内存访问效率而在Java中自动添加的额外字节。它确保对象和数组字段的对齐提高内存访问的效率和性能。开发人员无需手动处理对齐字节由Java虚拟机自动处理。 其中对齐字节也称为填充对齐作用就是用来保证Java对象在所占用内存字节数为8的倍数8N Bytes,HotSopt VM内存管理要求对象的起始地址必须是8字节的整数倍 2.对象结构中核心字段的作用 下面我们来对Object实例结构中的几个重要字段作一些简单说明 2.1.MarkWord(标记字) 在Java对象头部的一部分内存空间用于存储对象的元数据和状态信息被称为MarkWord。MarkWord包含了对象的哈希码、锁信息、GC标记等信息。它的具体结构和内容在不同的JVM实现中可能会有所差异。 2.2.Class Pointer(类对象指针) 在Java对象头部的另一部分内存空间用于存储指向该对象所属类的指针被称为Class Pointer。这个指针指向对象的类的元数据包括类的方法、字段等信息。通过Class Pointer可以在运行时获取对象所属的类并进行相应的操作。 2.3.Array Length(数组长度) 对于数组对象Java对象头部的一部分内存空间用于存储数组的长度信息。这个长度信息在创建数组时被初始化之后无法被修改。 2.4.对象体 象体是Java对象的实际数据部分包含了对象的字段值。对象体的大小取决于对象中定义的字段及其类型。对象体紧跟在对象头部之后占据连续的内存空间。 2.5.对齐字节 在Java对象的内存布局中为了对齐数据而添加的额外字节被称为对齐字节。对齐字节的存在是为了提高内存访问的效率和性能。它确保对象和数组字段的对齐使得数据能够被高效地加载到寄存器或缓存中。 3.Mark Word的结构信息 Java内置锁涉及了很多的重要信息这些都存放在对象结构中放放于对象头的MarkWord字段中MarkWord长度为JVM的一个Word大小也就说32位JVM MakrWord 为32位 64位的Mark Word为64位MarkWord的位长度并不会受到OOP对象指针压缩的影响。 Java内置锁的状态一共分为4种【无锁】-【偏向锁】-【轻量级锁】-【重量级锁】四种锁的状态会随着竞争的情况逐渐升级而且过程是不可逆的不可降级锁只会升级不会降级。 3.1.不同锁状态下的Mark Word字段结构 Mark Word 字段的结构和Java内置锁的结构 强相关为了让Mark Word字段存储更多的信息JVM将Mark Word的最低两个位置设置为Java内置锁状态 下面通过图来了解一下Mark Word 结构 3.2.Mark Word的构成 目前主流的JVM都是64位使用64位的Mark Word 下面对64位的Mark Word的各部分进行简单介绍下 **lock锁状态**lock字段用于表示对象的锁状态。它包含了对象的锁信息可以标识对象是否被锁定以及锁的类型如无锁、偏向锁、轻量级锁、重量级锁等。锁状态的具体取值和意义在不同的JVM实现中可能会有所差异。biased_lock偏向锁标记biased_lock字段用于表示对象是否启用了偏向锁。偏向锁是一种针对无竞争的情况下优化的锁机制用于提高单线程访问同步块的性能。当对象启用偏向锁时biased_lock字段的值为1表示该对象已经偏向于某个线程不需要进行锁的竞争。**age对象年龄**age字段用于表示对象的年龄。在垃圾回收的过程中JVM会根据对象的年龄来决定是否将对象晋升为老年代。对象的年龄通过age字段进行记录当对象经过一次Minor GC年轻代垃圾回收而没有被回收时其年龄会增加。**identity_hashcode标识哈希码**identity_hashcode字段用于存储对象的标识哈希码。标识哈希码是对象的一个唯一标识与对象的内容无关。它在需要比较对象的引用是否相等时起到重要的作用。**thread持有锁的线程**thread字段用于记录当前持有锁的线程。在多线程环境下当一个线程获得对象的锁时该字段会记录该线程的引用以便在锁的释放或竞争时进行相应的操作。**epoch锁记录的版本号**epoch字段用于记录锁记录的版本号。它在偏向锁撤销和轻量级锁升级为重量级锁时起到重要作用。当锁状态发生变化时会更新epoch字段的值以确保锁记录的有效性。**ptr_to_lock_record指向锁记录的指针**ptr_to_lock_record字段用于指向对象的锁记录。锁记录是在竞争过程中创建的数据结构用于记录锁的状态和竞争情况等信息。**ptr_to_heavyweight_monitor指向重量级监视器的指针**ptr_to_heavyweight_monitor字段用于指向重量级监视器的指针。当对象的锁升级为重量级锁时会创建一个重量级监视器来管理锁的竞争。 这些字段在MarkWord中扮演着重要的角色用于管理对象的锁状态、偏向锁、年龄、哈希码等信息。它们的具体含义和使用方式在不同的JVM实现中可能会有所不同但它们都对对象的同步和垃圾回收起到了重要的作用。 4.使用JOL工具查看对象的布局 如何在Java程序中查看Object对象头的结构呢我们可以使用OpenJDK提供的JOL工具 JOL是分析JVM中对象的结构布局的工具该用具大量使用了Unsafe ,JVMTI来解码内部布局情况分析结果还是比较准确的。 4.1.引入依赖 !-- https://mvnrepository.com/artifact/org.openjdk.jol/jol-core -- dependencygroupIdorg.openjdk.jol/groupIdartifactIdjol-core/artifactIdversion0.10/version /dependency 4.2.编写对象布局分析的测试代码 public class JOLTest {private static final Logger log LoggerFactory.getLogger(JOLTest.class);TestDisplayName(测试JOL的使用)public void testJOL() {// 创建一个示例对象Student student new Student();student.name 喜羊羊;// 打印JVM信息log.error(JVM详细信息: {}, VM.current().details());// 打印对象布局信息log.error(对象布局:);log.error(ClassLayout.parseInstance(student).toPrintable());}} class Student{public String name; } 运行结果 4.3.输出结果解读 常见的Java数据类型及其在内存中所占用的字节数 数据类型字节数范围备注boolean1true 或 false布尔类型只占用一个字节但实际取值范围为 true 或 false。byte1-128 到 127有符号的8位整数类型。short2-32,768 到 32,767有符号的16位整数类型。char20 到 65,535无符号的16位Unicode字符类型。int4-2,147,483,648 到 2,147,483,647有符号的32位整数类型。float4IEEE 754 单精度浮点数有效位数约为 6-7 位单精度浮点数类型用于表示小数。long8-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807有符号的64位整数类型。double8IEEE 754 双精度浮点数有效位数约为 15 位双精度浮点数类型用于表示小数。reference4 / 8对象引用取决于操作系统位数32位操作系统为 4 字节64位操作系统为 8 字节表示对Java对象的引用指向对象在堆中的内存地址。对象头部Object Header12对象的元数据和状态信息对象头部包含标记字段、哈希码、锁信息等具体结构和大小可能会因Java虚拟机实现的不同而有所差异。 需要注意的是数据类型的字节数可能会因特定的编译器、操作系统和硬件架构而有所不同。引用类型的大小取决于操作系统的位数32位操作系统上为4字节64位操作系统上为8字节。对象头部Object Header的大小也可能因不同的Java虚拟机实现而有所不同。 通过结果我们可以得到 对象头部object header占据了前12个字节0-11字节的空间 第一个字段偏移量0值为 01 00 00 00十六进制形式对应的二进制为 00000001 00000000 00000000 00000000。这是对象的标记字段表示对象的状态和锁信息。第二个字段偏移量4值为 00 00 00 00十六进制形式对应的二进制为 00000000 00000000 00000000 00000000。这个字段也是对象头部的一部分具体含义可能是保留字段或其他元数据。第三个字段偏移量8值为 80 77 13 01十六进制形式对应的二进制为 10000000 01110111 00010011 00000001。这个字段是对象头部的一部分可能是用来存储对象的哈希码或其他标识信息。 com.hrfan.java_se_base.base.thread.jol.Student对象的实例大小为16字节。com.hrfan.java_se_base.base.thread.jol.Student对象的字段中只有一个字段是java.lang.String类型的即Student对象的name字段。该字段位于偏移量为12的位置占据了4个字节的空间。对象的空间损失为0字节既没有内部损失也没有外部损失。 4.4.大小端问题 有关字节序列存放格式目前有两大主流阵营一个阵营是PowerPC系列的CPU,采用大端模式进行存放数据第二大阵营是X86系列的CPU采用小端模式存放数据 大小端Endianness是指在多字节数据类型存储时字节的存放顺序。在计算机中多字节数据类型如整数、浮点数等通常由多个字节组成而字节本身是按照一定的顺序进行存储的。具体来说大小端指的是最低有效字节即最右边的字节和最高有效字节即最左边的字节的存放顺序。 在大端字节序Big Endian中最高有效字节存储在最低的地址而最低有效字节存储在最高的地址。这意味着在多字节数据类型中字节的存放顺序与它们的值相对应。例如对于16位整数值0x1234它的最高有效字节是0x12最低有效字节是0x34在大端字节序中它们将按照如下顺序存储0x12高地址和0x34低地址。 在小端字节序Little Endian中最低有效字节存储在最低的地址而最高有效字节存储在最高的地址。这意味着在多字节数据类型中字节的存放顺序与它们的值相反。以同样的例子对于16位整数值0x1234在小端字节序中它们将按照如下顺序存储0x34低地址和0x12高地址。 内存地址大端字节序大端字节序二进制小端字节序小端字节序二进制0x10000x120001 00100x340011 01000x10010x340011 01000x120001 0010 在大端字节序中高位字节0x12存储在低地址0x1000低位字节0x34存储在高地址0x1001。二进制表示为0001 0010高位字节和0011 0100低位字节。 在小端字节序中低位字节0x34存储在低地址0x1000高位字节0x12存储在高地址0x1001。二进制表示为0011 0100低位字节和0001 0010高位字节。 5.Java中的内置锁 在JDK1.6之前所有的锁都是重量级锁重量级锁会造成CPU在用户态和核心态之间频繁切换所以代价高效率地下。所以在JDK1.6以后引入【偏向锁】【轻量级锁】的实现。 当涉及到多线程并发访问共享资源时Java中的锁状态会根据不同的情况进行动态调整。 5.1.无锁状态 无锁状态表示对象没有被任何线程锁定多个线程可以同时访问该对象而不会发生互斥或同步等操作。这种情况通常在没有竞争的情况下发生。例如以下代码片段展示了一个无锁状态的示例 int counter 0;// 线程1 counter;// 线程2 counter;在这个示例中两个线程可以同时对counter变量进行递增操作因为没有竞争发生。 5.2.偏向锁状态 偏向锁状态是一种针对无竞争情况下的优化。当一个线程获取了一个对象的锁并且在之后连续多次访问该对象时JVM会将该对象升级为偏向锁状态。偏向锁的目的是为了提高无竞争情况下的性能。以下是一个偏向锁状态的示例 class Counter {private int count 0; }public class Test m {public static void main(String[] args) {Counter counter new Counter();// 线程1获取锁并连续多次访问synchronized (counter) {counter.count;counter.count;// ...}// 线程2再次获取锁并访问synchronized (counter) {counter.count;// ...}} }在这个示例中线程1获取了counter对象的锁并连续多次访问了count字段。由于没有其他线程竞争该锁counter对象会被升级为偏向锁状态线程2再次获取锁时会直接进入偏向锁状态从而避免了同步操作。 5.3.轻量级锁状态 轻量级锁状态适用于多个线程竞争同一个对象的锁的情况。在轻量级锁状态下锁的获取和释放使用CAS操作来实现避免了传统的互斥量机制从而提高了性能。以下是一个轻量级锁状态的示例 class Counter {private int count 0; }public class Test {public static void main(String[] args) {Counter counter new Counter();// 线程1获取锁synchronized (counter) {// ...}// 线程2尝试获取锁synchronized (counter) {// ...}} }在这个示例中线程1获取了counter对象的锁此时counter对象处于轻量级锁状态。当线程2尝试获取锁时它会使用CAS操作进行自旋尝试获取锁如果竞争不激烈线程2可以快速获取到锁避免了进入重量级锁状态。 5.4.重量级锁状态 重量级锁状态适用于竞争激烈的情况它使用操作系统的互斥量机制来进行锁的获取和释放。重量级锁确保了线程的互斥访问但在竞争激烈的情况下可能导致线程的频繁切换和性能下降。以下是一个重量级锁状态的示例 class Counter {private int count 0; }public class Test {public static void main(String[] args) {Counter counter new Counter();while(true){// 线程1获取锁synchronized (counter) {// ...}// 线程2获取锁synchronized (counter) {// ...}// 特定条件下退出循环// .......}} }在这个示例中线程1和线程2同时竞争获取counter对象的锁。由于竞争激烈JVM会将counter对象升级为重量级锁状态这时锁的获取和释放会涉及到操作系统的互斥量机制。 注意具体的锁状态转换和升级过程由JVM自动管理开发者在编写代码时无需显式处理锁状态的转换。锁状态的调整是根据实际的并发情况自动进行的。 后面我们会专门对偏向锁轻量级锁重量级锁进行分析
http://www.laogonggong.com/news/121170.html

相关文章:

  • 百度搜索到自己的网站衡水手机网站建设公司
  • 网站系统优化手机网站建设是什么
  • 在线做网站教程茂名免费做网站
  • 网站建设包括哪些小型教育网站的开发与建设论文
  • 石家庄微信网站制作新罗区优出网络科技有限公司
  • 陕西专业网站开发公司wordpress 后台分页按钮
  • 学校网站建设开发方案书一流的做pc端网站
  • 门户网站 意义wordpress密码验证失败
  • 贵阳企业免费建站建网站做商城个体户资质可以
  • 合肥专业网站建设公司wordpress 注册 攻击
  • 深圳前海网站设计本地服务器搭建教程
  • 国外购物网站大全2022热点新闻事件
  • gis网站开发实战教程怎么样申请网站
  • 怎么做动漫原创视频网站网站的ftp上传地址
  • 北京网站建设服务器维护珠海专业网站建设公司哪家好
  • 深圳住房和建设局网站在哪个网免费发布项目信息的平台
  • 苏州企业网站制作开发少主网络建站
  • 网站公司谁跟客户客户沟通网站路径优化怎么做
  • 朋友做的网站图片不显示不出来的WordPress怎么新建导航菜单
  • 上海网站建设 微信开发公司网络公司有什么职位
  • 网站项目建设主要内容青岛注册公司网站
  • 中国网站建设市场分析可以在哪个网站做封面赚钱
  • dw做的网站放文件夹南京网站建设公司哪家好
  • 自己做的php网站进行伪静态网站设计论文前言怎么写
  • 信息技术教案 建设我们的网站企业咨询管理师
  • 做网站项目计划书生成链接的软件
  • 烟台网络公司网站建设app推广一年赚了百万
  • 廊坊专业做网站大都会app最新版本下载
  • 福田专业做网站公司武建安装公司新闻
  • 巢湖路桥建设集团网站国外的网站建设