• 运行数据区


    运行数据区分为本地方法区,堆,栈,寄存器,本地方法栈。

    1、方法区:被称为静态区,和堆一样,会被所有线程共享。方法区会包含静态的class和static变量。在java虚拟机启动的时候会被装载。

    2、堆

    储存对象,即new出的实例,会在堆中储存。会被所有线程共享,不存放基本类型和对象引用。

    对象中会有一个指向方法区的指针,用来把堆中new出的对象和方法区的类和静态变量连接起来。

    堆有两个部分,一个句柄池,一个对象池。

    句柄池有两部分,一个指向对象变量的指针。还有一部分是指向方法区中的指针

    3、对象锁:虚拟机中每个对象都有一个对象锁,用于协调多个线程访问同一个对象时的同步。

    4、数组:数组即对象,对象即数组。数组是储存在堆中的。在调用方法的时候传入数组即传入了对象,这个时候(由于java中只有一个堆,用来储存对象)在方法中对数组的操作,即操作了堆中对象的操作。

    5、栈

    每次启动一个新线程的时候,Java虚拟机会为其分配一个栈。

    Java虚拟机只执行出栈和压栈的操作。

    某个线程执行的方法称为该线程的当前方法,当前方法使用的栈帧属于当前帧。当前方法属于的类称为当前类,当前类的常量池称为当前常量池。
    每个线程调用一个Java的方法的时候,会在该线程的Java栈中压入一个新栈,这个新栈称为当前帧,这个帧用来储存一些非静态变量的内容。当方法调用完成以后,会弹出帧,销毁内容。

    方法调用传入数组和变量的的区别

    数组,是一个对象,指向堆中的一块储存地址,变量,属于当前方法帧中的方法栈,调用的时候会直接压栈,调用完成以后会执行出栈操作。所以传入变量不会保存,传入数组会保存更改。

    Java栈上的数据所有数据是此线程私有的。不能被其他线程共享。

    堆会被共享,方法区会被共享。

  • 相关阅读:
    NO.6: 若不想编译器提供自动生成的函数,就应该明确拒绝
    NO.5: 了解C++编译器默认为你生成的构造/赋值/析构
    NO.4: 确定对象被使用前已被初始化
    NO.3: 尽量使用const
    NO.2: 尽量以const,enum,inline 替换 #define
    NO.1: 视C++为一个语言联邦
    C/C++ exception类
    C/C++ 类成员函数指针 类成员数据指针
    c++中的 Stl 算法(很乱别看)
    自定义类签发校验token-实现多方式登录-自定义反爬类-admin后台表管理字段自定义-群查接口-搜索-排序-分页
  • 原文地址:https://www.cnblogs.com/kingshine007/p/12626611.html
Copyright © 2020-2023  润新知