首页 > 其他分享 >深入学习JVM04 线程与变量

深入学习JVM04 线程与变量

时间:2023-10-11 10:09:46浏览次数:37  
标签:生命周期 变量 food 创建 对象 线程 klass JVM04

18 JVM中的变量

在 food 背后,有一个与它对应的 klass 对象,它记录了 food 的类型信息,就像是有一个标签写着 food 的品类和特点。每个 klass 对象维护着一个虚函数表,记录了类中所有的虚函数以及对应的指针。当 food 调用一个方法时,JVM 根据它的实际类型找到它的 klass 对象,然后在虚函数表中寻找正确的函数指针,使得 food 能够调用正确的方法。这种实现方式让我们具备了多态性,让它的行为可以根据实际情况进行适应。

生存空间

首先,栈上的变量是局部变量,包括方法中定义的变量和代码块中定义的变量。它们的生命周期与方法调用或代码块的执行周期相同。变量在栈上的创建非常快速,而且在方法或代码块执行结束后会自动销毁。在使用栈上的变量之前,必须显式地为其赋值。

堆中的变量是通过 new 关键字创建的对象和数组。它们的生命周期与对象或数组本身相同,当没有引用指向它们时,会被垃圾收集器回收。堆中的变量创建比较耗时,需要为对象或数组分配内存空间,并进行初始化。在对象创建时,成员变量会被赋予默认值。

方法区中的变量主要是静态变量。它们的生命周期与类的生命周期相同,在类被加载时创建,在类被卸载时销毁。静态变量在方法区中创建并初始化,在使用之前已经具有默认值。



标签:生命周期,变量,food,创建,对象,线程,klass,JVM04
From: https://blog.51cto.com/u_6478076/7806667

相关文章

  • 04-Shell字符串变量
    1.字符串变量的三种方式字符串(String)就是一系列字符的组合。字符串是Shell编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)单引号方式双引号方式,推荐不用引号方式var='abc'var2="abc"var3=abc1.1三种格式的区别使用单引号''的字符串:任......
  • 变量提升与函数提升
    变量提升的主要原因是JavaScript的解释执行方式。在代码执行之前,JavaScript引擎会扫描整个作用域,找到所有的变量声明(使用var关键字声明的变量)和函数声明,然后将它们提升到作用域的顶部。例如,考虑以下代码:javascript:console.log(name);//输出undefinedvarname='Joh......
  • 03-Shell环境变量深入
    1.自定义系统环境变量1.1全局配置文件/etc/profile应用场景当前用户进入Shell环境初始化的时候会加载全局配置文件/etc/profile里面的环境变量,供给所有Shell程序使用以后只要是所有Shell程序或命令使用的变量,就可以定义在这个文件中1.2案例/etc/profile定义存储自定义......
  • linux 多线程写
      pread 和 pwrite 函数是linux下C语言编程中非常好用的IO操作函数。它们属于系统调用,在2.1.60之后版本的linux下都可以使用,尤其适合用于多线程的应用中,它们允许多个线程操作同一个文件描述符,不会互相影响彼此的文件偏移(offset)。 pread和pwrite函数所需......
  • 多线程分批处理数据(控制服务器cpu,控制数据库cpu)
    packageip;importcom.google.common.collect.Lists;importlombok.extern.slf4j.Slf4j;importjava.util.List;importjava.util.concurrent.CountDownLatch;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;/***功能描述:总思路,根据业务......
  • 多线程使用场景三-异步调用
         ......
  • 多线程使用场景二(数据汇总)
       ......
  • 线程安装-synchronized关键字
         ......
  • 如何停止一个线程
          ......
  • 创建线程的方式有哪些
            ......