JVM之对象创建以及调用main方法调用其他方法详解

简介: JVM之对象创建以及调用main方法调用其他方法详解

三、方法中new对象同时调用另外一个方法的JVM指令详解

package com.zhou.jvm.runtimedataAreainstructionset;
/**
 * @author zhouyanxiang
 * @create 2020-08-2020/8/6-8:43
 */
public class TestMethod {
    public static void main(String[] args) {
        TestMethod t = new TestMethod();
        t.m();
    }
    public void m() {
        int i = 200;
    }
}

这个是main方法的Bytecode

0 new #2 <com/zhou/jvm/runtimedataAreainstructionset/TestMethod>
 3 dup
 4 invokespecial #3 <com/zhou/jvm/runtimedataAreainstructionset/TestMethod.<init>>
 7 astore_1
 8 aload_1
 9 invokevirtual #4 <com/zhou/jvm/runtimedataAreainstructionset/TestMethod.m>
12 return

这个是m方法的Bytecode

0 sipush 200
3 istore_1
4 return

3.1 new

会在堆内存开辟一个对象的空间,并将对象的赋值为默认值,同时会将对象的地址值压入操作数栈

3.2 dup

dup指令全称应该是duplicate复制的意思,将操作数栈中存的对象的地址值复制一份

3.3 invokespecial

invokespecial指令就是调用初始化方法,把堆内存的对象赋值为初始值,同时将上一步复制的地址值要弹出去,为了告诉哪个对象再执行所以需要弹栈拿出去进行计算。

弹栈处理完后的结果图如下

3.4 astore_1

将地址值弹栈压入局部变量表赋值给索引为1的变量

3.5 aload_1

把局部变量表中索引为1的变量的值压入操作数栈当中

3.6 invokevirtual

invokevirtual把操作数栈的值弹栈,去另外一个操作数栈中得到值

3.7 m方法的JVM指令

0 sipush 200
3 istore_1
4 return

sipush 200是将200压入操作数栈当中

istore_1就是将200弹栈到局部变量表当中

return返回

3.8 m的return之后回到了main方法的invokevirtual指令结束


相关文章
|
11天前
|
存储 算法 Java
散列表的数据结构以及对象在JVM堆中的存储过程
本文介绍了散列表的基本概念及其在JVM中的应用,详细讲解了散列表的结构、对象存储过程、Hashtable的扩容机制及与HashMap的区别。通过实例和图解,帮助读者理解散列表的工作原理和优化策略。
25 1
散列表的数据结构以及对象在JVM堆中的存储过程
|
1月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
60 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
1月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
53 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
1月前
|
算法 Java
JVM进阶调优系列(3)堆内存的对象什么时候被回收?
堆对象的生命周期是咋样的?什么时候被回收,回收前又如何流转?具体又是被如何回收?今天重点讲对象GC,看完这篇就全都明白了。
|
3月前
|
存储 Java 程序员
Java中对象几种类型的内存分配(JVM对象储存机制)
Java中对象几种类型的内存分配(JVM对象储存机制)
83 5
Java中对象几种类型的内存分配(JVM对象储存机制)
|
3月前
|
缓存 监控 算法
吃透 JVM 诊断方法与工具使用
【8月更文挑战第4天】深入了解并掌握JVM诊断需把握几大要点:1) 熟悉JVM内存模型,如堆、栈及方法区;2) 掌握垃圾回收机制与算法;3) 运用工具如`jps`(查看Java进程)、`jstat`(监控运行状态)、`jmap`(生成堆快照)、`jhat`(分析堆快照)、`jstack`(检查线程栈); 4) 利用专业工具如Eclipse Memory Analyzer分析堆转储文件查找内存泄漏; 5) 动态监控与调整JVM参数; 6) 结合日志分析性能瓶颈。通过实战案例加深理解,有效应对JVM性能问题。
|
4月前
|
存储 监控 算法
(六)JVM成神路之GC基础篇:对象存活判定算法、GC算法、STW、GC种类详解
经过前面五个章节的分析后,对于JVM的大部分子系统都已阐述完毕,在本文中则开始对JVM的GC子系统进行全面阐述,GC机制也是JVM的重中之重,调优、监控、面试都逃不开的JVM话题。
126 8
|
4月前
|
存储 缓存 算法
(五)JVM成神路之对象内存布局、分配过程、从生至死历程、强弱软虚引用全面剖析
在上篇文章中曾详细谈到了JVM的内存区域,其中也曾提及了:Java程序运行过程中,绝大部分创建的对象都会被分配在堆空间内。而本篇文章则会站在对象实例的角度,阐述一个Java对象从生到死的历程、Java对象在内存中的布局以及对象引用类型。
124 8
|
4月前
|
监控 安全 Java
JVM内存问题之排查Direct Memory泄漏有哪些常用方法
JVM内存问题之排查Direct Memory泄漏有哪些常用方法
115 2
|
3月前
|
监控 Java Android开发
吃透 JVM 诊断方法与工具使用
【8月更文挑战第3天】要精通JVM诊断,需掌握关键监控指标如内存(堆/非堆)、CPU使用及线程状态;熟悉工具如`jstat`(监控状态)、`jmap`(堆转储)、`jstack`(线程堆栈);并能利用Eclipse Memory Analyzer (MAT)分析堆转储找内存泄漏;同时理解GC日志以优化垃圾回收行为;通过实践案例加深理解。