1.JVM之创建对象源码分析
2.数据结构(Java版)实验2:使用一个栈,数据数据将十进制转换成二进制、结构结构八进制或十六进制。源码
JVM之创建对象源码分析
欢迎探索我的代码技术分享:《半栈工程师》 对于Java对象的创建,我过去只是数据数据停留在理论层面,但最近研究HotSpot虚拟机时,结构结构布林线经典战法指标源码我深入剖析了JVM创建Java对象的源码底层机制。Java对象创建流程详解
首先,代码我们从一个简单的数据数据实例开始,看看如何通过代码创建一个Dog对象: 代码中new Dog()在编译成字节码后,结构结构会变成new #2,源码这里的代码new是实例化对象的关键字,#2则指向常量池中的数据数据发卡代理源码Dog类索引。常量池是结构结构类编译后的存储区域,包含了各种符号引用和常量。源码new指令源码剖析
接下来,我们将深入new指令的源码。虽然涉及汇编代码,但无需立即深入,源码怎么依赖先了解一下《JVM之模板解释器》会有所帮助。新指令的运行过程如下:从指令中获取类在常量池的索引,存入rdx寄存器,并记录当前指令地址。
获取常量池地址和元素类型数组_tags,用于后续类型检查。edge查看源码
检查元素类型是否为JVM_CONSTANT_Class,如果不是,进入慢速分配。
获取并入栈类的运行时数据结构InstanceKlass,即类的内存地址。
判断类是桌面分类 源码否已解析,未解析则执行慢速分配,解析过的进入快速分配。
计算类实例大小并分配内存,首先尝试TLAB区,失败则在Eden区分配。
初始化对象实例数据和对象头。
如果类未解析,执行慢速分配过程。
总结
至此,我们了解了Java对象从创建到初始化的全过程。虽然使用了模板解释器,但理解字节码解释器中的相关方法也是个不错的选择。如果你对HotSpot源码感兴趣,欢迎加入讨论,我的****是wechat:wang_atbeijing。数据结构(Java版)实验2:使用一个栈,将十进制转换成二进制、八进制或十六进制。
public static String baseConverter(int decNumber,int base){
String[] digits = new String[]{ "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
String result = "";
Stack<Integer> remStack = new Stack<Integer>();
while(decNumber > 0){
int rem = decNumber % base;
remStack.push(rem);
decNumber = decNumber/base;
}
while(!remStack.isEmpty()){
result = result+digits[remStack.pop()];
}
return result;
}
这个可以任意转换,记得采纳啊
2024-11-27 05:01
2024-11-27 04:49
2024-11-27 03:55
2024-11-27 03:23
2024-11-27 03:09
2024-11-27 02:42