Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java静态方法和实例方法 java中的数组作为形参传入

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

原创
作者头像
mySoul
发布于 2018-10-11 13:17:01
发布于 2018-10-11 13:17:01
1.4K0
举报
文章被收录于专栏:mySoulmySoul

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

Java虚拟机

启动一个Java程序的时候,会诞生一个虚拟机实例,当程序关闭退出时,该实例会消失。

如果一个机器上运行着三个Java程序,即有三个Java虚拟机实例

Java虚拟机会调用某个初始类的main()方法运行一个Java程序,此方法将会作为程序的初始线程启动,任何线程都是由主线程启动的。

守护线程和非守护线程

Java虚拟机有两种线程,守护线程和非守护线程。

例如垃圾收集任务的线程,属于守护线程。

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

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

类加载器

用于加载class文件中的类

运行数据区

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

方法区

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

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

储存对象,即new出的实例,会在堆中储存。

会被所有线程共享,不存放基本类型和对象引用。

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

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

句柄池

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

代码语言:txt
AI代码解释
复制
a e = new a()

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

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

即指向方法区中类a的指针

对象锁

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

关于数组

在Java中和js一个样子

数组即对象,对象即数组

数组是储存在堆中的

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

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

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

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

某个线程执行的方法称为该线程的当前方法,当前方法使用的栈帧属于当前帧。当前方法属于的类称为当前类,当前类的常量池称为当前常量池。

每个线程调用一个Java的方法的时候,会在该线程的Java栈中压入一个新栈,这个新栈称为当前帧,这个帧用来储存一些非静态变量的内容。

当方法调用完成以后,会弹出帧,销毁内容

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

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

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

静态方法和实例方法

静态方法会在程序运行的时候直接装载进入方法区。而实例方法会在new的时候以对象的方法装载进入堆中。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java虚拟机
1、Java虚拟机是什么 “Java虚拟机“可以指三种不同的东西 抽象规范 一个具体的实现 一个运行中的虚拟机实例 当运行一个Java程序的同时,也就是在运行一个Java虚拟机实例 2、Java虚拟机
java达人
2018/01/31
1.3K0
Java虚拟机
Java虚拟机体系结构
本文主要介绍了Java虚拟机中的栈和堆,以及它们在Java程序运行时数据区中的位置和作用。同时,还详细讲解了栈和堆的组成部分以及它们各自的作用。此外,还介绍了Java虚拟机中的垃圾回收机制,以及它在Java程序运行时如何自动处理废弃的对象。
Java后端工程师
2017/12/12
1.8K1
Java虚拟机体系结构
独特视角解读JVM内存模型
每一个类被加载的时候,java 虚拟机都监视这个类,看它到底是被启动类加载器加载还是用户定义的类加载器加载。当被装载的类引用了另外一个类的时候,虚拟机就会使用装载第一个类的类装载器装载被引用的类。
大忽悠爱学习
2023/03/23
4140
独特视角解读JVM内存模型
JVM内存模型(通俗易懂)
大家好,又见面了,我是你们的朋友全栈君。 1.什么是jvm? (1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。 (2)jvm包含一
全栈程序员站长
2022/08/10
4000
JVM内存模型(通俗易懂)
java虚拟机构造原理
 Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三个程序,就会有三个运行中的Java虚拟机。 Java虚拟机总是开始于一个main()方法,这个方法必须是公有、返回void、直接受一个字符串数组。在程序执行时,你必须给Java虚拟机指明这个包换main()方法的类名。 Main()方法是程序的起点,他被执行的线程初始化为程序的初始线程。程序中其他的线程都由他来启动。Java中的线程分为两种:守护线程
xiangzhihong
2018/01/30
6210
java虚拟机构造原理
JVM内存模型1 程序计数器2. Java虚拟机栈(JVM Stack)3. 本地方法栈(Native Method Stack)4 Java堆(Java Heap)5 方法区6 直接内存(Direc
JVM内存模型 1 程序计数器 1.1. 定义 程序计数器是一块较小的内存空间,可看作当前线程正在执行的字节码的行号指示器 如果当前线程正在执行的是 Java方法 计数器记录的就是当前线程正在执行的字节码指令的地址 本地方法 那么程序计数器值为undefined 1.2. 作用 程序计数器有两个作用 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程
JavaEdge
2018/05/16
1.4K0
JVM规范定义运行时数据区剖析-Java快速进阶教程
内存是非常重要的系统资源,是硬盘和 CPU 的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的 JVM 对于内存的划分方式和管理机制存在着部分差异。Java 虚拟机规范定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程一一对应的数据区域会随着线程开始和结束而创建和销毁。
jack.yang
2025/04/05
640
JVM规范定义运行时数据区剖析-Java快速进阶教程
JVM运行时数据区和各个区域的作用
JVM在执行JAVA程序时会把它管理的内存区域划分为若干个不同的数据区域,统称为运行时数据区,由图可见JVM程序所占的内可划分成5个部分:程序计数器、虚拟机栈(线程栈)、本地方法栈、堆(heap)和方法区(内含常量池),其中方法区和堆被所有线程共享。下面分别介绍各部分的功能:
allsmallpig
2021/02/25
1.4K0
JVM原理最全、清晰、通俗讲解,五天40小时吐血整理
另外,小编也有根据以下总结内容,录制了对JVM讲解视频。里面有个用visio画的JVM内部结构图,每部分的作用都有详细讲解,希望能有帮助。网址:https://edu.csdn.net/lecturer/board/10494
全栈程序员站长
2022/08/09
1.3K0
JVM原理最全、清晰、通俗讲解,五天40小时吐血整理
再探Java内存分配
这两天有个同事抓耳挠腮地纠结:Java到底是值传递还是引用传递。百思不得其姐,他将这个问题抛给大家一起讨论。于是,有的人说传值,有的人说传引用;不管哪方都觉得自己的理解是正确无误的。
开发者技术前线
2020/11/23
6440
再探Java内存分配
绝了!华为技术专家居然把JVM内存模型讲解这么细致!
内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。 JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨经典的JVM内存布局。
JavaEdge
2021/05/06
7080
绝了!华为技术专家居然把JVM内存模型讲解这么细致!
Java虚拟机详解----JVM内存结构
http://www.cnblogs.com/smyhvae/p/4748392.htm
爱撸猫的杰
2019/03/28
3520
Java虚拟机详解----JVM内存结构
详细介绍Java虚拟机(JVM)
  一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三个程序,就会有三个运行中的Java虚拟机。 Java虚拟机总是开始于一个main()方法,这个方法必须是公有、返回void、直接受一个字符串数组。在程序执行时,你必须给Java虚拟机指明这个包换main()方法的类名。main()方法是程序的起点,他被执行的线程初始化为程序的初始线程。程序中其他的线程都由他来启动。
用户1205080
2018/09/12
5260
详细介绍Java虚拟机(JVM)
Java内存区域
对于c++选手来说, 内存管理是一项基本功,因为c++没有自带的管理技术, 所以c++开发人员需要自己对实现的所有代码进行内存管理。 虽然说Java实现了一套自己的内存管理机制, 这让Java程序员可以全心投入到需求开发中去, 不需要对内存做太多了的了解。 但是问题也正是出现在这里, 因为不知道虚拟机是怎么使用内存的,所以出了问题也是无从下手,不知道具体哪里出了问题。 所以这些都是我们Java程序员需要了解和掌握的内存管理技术的原因。
用户11097514
2024/05/31
1970
Java内存区域
理解Java虚拟机体系结构
  众所周知,Java支持平台无关性、安全性和网络移动性。而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么。正是得益于Java虚拟机,它号称的“一次编译,到处运行”才能有所保障。
Java团长
2018/07/23
3920
理解Java虚拟机体系结构
java 静态变量 存储_java中,类的静态变量如果是对象,该对象将存储在内存的哪个区域?…
Java字节码与Native机器码不同,字节码是运行在JVM这一平台上的,字节码在被解释的过程中,具体的执行方式因JVM的不同实现而不同,但是对于JVM来说,它的各种不同实现都必须要遵循Java虚拟机规范。JVM的运行时数据区包含以下部分:
全栈程序员站长
2022/08/11
1.9K0
Java内存区域有哪些构成?
Java 内存区域, 也叫运行时数据区域、内存区域、JVM内存模型,和 Java 虚拟机(JVM)的运行时区域相关,是指 JVM运行时将数据分区域存储,强调对内存空间的划分。 经常与Java内存模型(JMM)混淆,其定义了程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。 JVM并不是只有唯一版本的,在Java发展历史中,有许多优秀的Java虚拟机,其中目前大家最熟悉的就是HotSpot虚拟机,什么你不知道?
Jensen_97
2023/07/19
3690
Java内存区域有哪些构成?
jdk和jvm区别_java中集合和数组的区别
最近翻看了java线程相关的东西,书中有一边专门讲到java内存模型,读完之后边回想起java虚拟机模型,那时心中便在思考java内存模型(以下简称jmm)和java虚拟机模型(以下简称jvm)之间的关系,下面将详细讲述。
全栈程序员站长
2022/10/03
3230
jdk和jvm区别_java中集合和数组的区别
【深入Java虚拟机】之一:Java内存区域与内存溢出
内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本
Java高级架构
2018/04/19
7330
【深入Java虚拟机】之一:Java内存区域与内存溢出
JVM规范系列第2章:Java虚拟机结构
简单地说,就是《JVM规范》中提到的内容,你一定要遵守。但没有提到的内容,你就自由发挥。所以我们要知道,我们经常听到的老年代、年轻代、永久代,其实只是HotSpot虚拟机的实现而已。因为《JVM规范》中并没有规定这些东西。
陈树义
2019/02/13
6060
推荐阅读
相关推荐
Java虚拟机
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档