随笔分类 - 《Java 底层原理》
摘要:前言 Java 字符串底层是如何存储的,如何提高性能的,今天就来好好了解一下。 字符串的存储结构 Jvm 有专门的字符串常量池用于存放字符串,存放字符串的数据结构是HashTable。 HashTable的数据结构如下: 看个案例: public class StringDemo { public
阅读全文
摘要:前言 Java 的性能调优,主要就是为了防止出现out of memory(oom)。Java出现oom就会直接导致程序停止运行。 调优 模拟元空间oom的情况 import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodI
阅读全文
摘要:前言 之前的学习也是为了让我们更好的理解GC,GC是我们学习Jvm的核心,因为我们后面的优化,为什么会出现oom,怎么调整堆空间的大小等等。 GC算法 第一种标记算法:引用计数法 在对象中添加一个属性用于标记对象被引用的次数,每多一个其他对象引用,计数+1,当引用失效时,计数-1,如果计数=0,表示
阅读全文
摘要:前言 Java 程序调优是一个程序员必备的技能。 对象内存结构 对象头: Mark Word :32bit机 4B;64bit机 8B 是固定的。 类型指针:klass pointer,引用类型在方法区的地址。 开启指针压缩占4字节,不开启占8个字节。 数组长度:对象不是数组占0字节,对象是数组占4
阅读全文
摘要:前言 通过JDK原理来重新理解一遍Java内存模型,通过其他方式学习到,总会有错误或者遗漏的情况。 内存模型 Java常常被提到的4个概念: class文件:硬盘上的.class文件 class content:类加载器将.clas文件加载入内存,存储字节码文件数据的那块内存区域 Class对象:C
阅读全文
摘要:前言 我们在开发中会遇到一些Java的执行超出我们的想象,但是又不知道他为什么会这样执行,这个时候我们就需要能够知道他编译后Class文件是什么样子的,并且理解字节码的含义。 Java字节码的原理 进制 class文件就是字节码文件,直接是打不开,打开也是乱码,需要解析才能看明白里面的内容。 现在存
阅读全文
摘要:前言 Java对象信息对开发者来说并不是透明的,需要借助工具来更好查询对象的运行情况,这里我们带来HSDB工具。 演示 打开工具过程 1. 工具是JDK自带的:目录:jdk1.8.0_191\lib\sa-jdi.jar。 2. 使用cmd,并且切换到Jar所在目录:C:\Program Files
阅读全文
摘要:前言 一直想好好的了解一下JVM,这次就来一起了解一下JVM是如何实现类的加载过程的。 原理 类加载的生命周期 1. 加载 5种类加载情况: 在遇到 new、putstatic、getstatic、invokestatic 字节码指令时,如果类尚未初始化,则需要先触发初始化。 对类进行反射调用时,如
阅读全文
摘要:前言 工作中需要实现一种功能:动态加载类对象信息,简单说就是class变了Jvm能够立马知道并且加载到内存。 类加载器分类 Java类加载器分为两种,一种是加载启动类,另一种是其他类加载器。Java加载类的关系:Launcher 1. 启动类加载器(BootstrapClassLoader)。 Ja
阅读全文
摘要:一、JVM 指令分类 (1)操作数栈 过程符号 变量到操作数栈 iload, iload_, lload, lload_, fload, fload_, dload, dload_, aload, aload_ 操作数栈到变量 istore, istore_, lstore, lstore_, fs
阅读全文
摘要:前言 为了方便我们查看Java 创建对象的情况,就出现对象诊断器 下载 百度网盘:链接: https://pan.baidu.com/s/1dGBwht7_iWyBALfRtbGM_A 提取码: ft9p 下载需要的Jar包 演示 public class LockDemo9 { public st
阅读全文
摘要:前言 随着底层原理的研究深入,需要查询JVM的代码生成的汇编指令的执行逻辑。 操作 window10 需要下载:hsdis-amd64.dll 链接: https://pan.baidu.com/s/1Okt3KrByjlstqdEigbt6iQ 提取码: 66e8 将文件放入:jdk目录下\jre
阅读全文

浙公网安备 33010602011771号