当前位置: 首页 > news >正文

Java静态方法和实例方法 java中的数组作为形参传入

Java静态方法和实例方法 java中的数组作为形参传入

Java虚拟机

启动一个Java程序的时候,会诞生一个虚拟机实例,当程序关闭退出时,该实例会消失。 如果一个机器上运行着三个Java程序,即有三个Java虚拟机实例 Java虚拟机会调用某个初始类的main()方法运行一个Java程序,此方法将会作为程序的初始线程启动,任何线程都是由主线程启动的。

守护线程和非守护线程

Java虚拟机有两种线程,守护线程和非守护线程。 例如垃圾收集任务的线程,属于守护线程。

Java可以将创建的任何线程定义为守护线程

main为非守护线程,当虚拟机中的所有非守护线程终止的时候,虚拟机实例将会自动退出。

类加载器

用于加载class文件中的类

运行数据区

分为本地方法区,堆,栈,寄存器,本地方法栈

方法区

被称为静态区,和堆一样,会被所有线程共享。方法区会包含静态的class和static变量

在java虚拟机启动的时候会被装载

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

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

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

句柄池

句柄池有两部分,一个指向对象变量的指针

a e = new a()
复制代码

其中,储存的是执行对象变量的指针,即指向栈中e的变量的地址

还有一部分是指向方法区中的指针 即指向方法区中类a的指针

对象锁

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

关于数组

在Java中和js一个样子 数组即对象,对象即数组 数组是储存在堆中的 所以,在调用方法的时候传入数组即传入了对象,这个时候(由于java中只有一个堆,用来储存对象)在方法中对数组的操作,即操作了堆中对象的操作。

和栈不同,属于直接引用了堆中的地址,属于引用而不是开辟了一块新的储存空间。即一个指针,指向其堆中数组的地址

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

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

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

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

静态方法和实例方法

静态方法会在程序运行的时候直接装载进入方法区。而实例方法会在new的时候以对象的方法装载进入堆中。 最大的区别在于内存的区别,由于main函数为static静态方法,会直接在运行的时候装载进入内存区,实例方法必须new,在堆中创建内存区域。再进行引用。

转载于:https://juejin.im/post/5bbf4c895188255c7e402ba3

相关文章:

  • [CodeForces-759D]Bacterial Melee
  • MongoDB lsm降低 disk lantency
  • CentOS7 LVM添加硬盘及扩容
  • Hanlp等七种优秀的开源中文分词库推荐
  • python基础===抽象
  • 【洛谷 P2303】 [SDOi2012]Longge的问题 (欧拉函数)
  • 【iOS-cocos2d-X 游戏开发之十六】Cocos2dx编译后的Android自动使用(-hd)高清图设置自适应屏幕...
  • 了解一下ES6: let const
  • 【斗医】【12】Web应用开发20天
  • WCF和IIS宿主的ASP.NET 共享会话
  • ORDER BY,GROUP BY 和DI STI NCT 优化
  • JS中字符串转义
  • 【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架
  • ORA-00119: invalid specification for system parameter LOCAL_LISTENER;
  • Mybatis介绍
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • AngularJS指令开发(1)——参数详解
  • javascript从右向左截取指定位数字符的3种方法
  • jQuery(一)
  • Linux链接文件
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • mysql 数据库四种事务隔离级别
  • PHP CLI应用的调试原理
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SQLServer之创建数据库快照
  • TCP拥塞控制
  • 工作手记之html2canvas使用概述
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 删除表内多余的重复数据
  • 鱼骨图 - 如何绘制?
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • k8s使用glusterfs实现动态持久化存储
  • ​secrets --- 生成管理密码的安全随机数​
  • !$boo在php中什么意思,php前戏
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #include<初见C语言之指针(5)>
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (八)c52学习之旅-中断实验
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (转)ABI是什么
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .dwp和.webpart的区别
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .Net mvc总结
  • .NET开发人员必知的八个网站
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET中GET与SET的用法