# 理解 Java 非静态方法在元数据区的实现
在 Java 中,我们的代码在运行时会经历多个阶段,其中最重要的一个阶段就是将 Java 类加载到内存中。这个过程涉及到元数据区的使用,而非静态方法在这个过程中扮演着重要的角色。对于初学者来说,理解这些概念可能会有点困难,下面我们将有步骤地解释这一过程,并通过代码示例来演示。
## 流程概述
首先,我们来看看整个流程是如何进行的,特别是如何涉及
本文撰文环境:windows10专业版(1809)eclipse编译工具 --- Version: 2018-12 (4.10.0)jdk环境java11(未使用jdk11特性)本文理解要点:理解类中被static定义的(静态成员)成员方法或变量,即使不实例化该类,也已经加载到了当前的运行环境的规定理解类中没有被static定义的(非静态成员)成员方法或变量,必须通过实例化该类,才可以加载到当前的
转载
2023-09-18 05:12:42
32阅读
1、基本原理 同C语言一样,java中也是将花括号{...},包括起来的代码称为一个代码块。java中我们通常将static修饰的代码块,称为静态代码块,随类存在,仅在类初始化时执行一次,那么类在什么时候初始化,主要有以下六种: &nbs
转载
2023-07-28 11:50:28
54阅读
# Java静态方法在方法区加载的实现过程
## 1. 流程表格
| 步骤 | 操作 |
| ---- | ---- |
| 1 | 编写java源文件,包含静态方法的定义 |
| 2 | 编译java源文件生成.class字节码文件 |
| 3 | 类加载器加载.class文件到方法区 |
| 4 | 静态方法在方法区中被加载并执行 |
## 2. 详细步骤
### 步骤一:编写java
作为运维,你不一定要会写Java代码,但是一定要懂Java在生产跑起来之后的各种机制。 本文为《Hi,运维,你懂Java吗》系列文章 第五篇,敬请关注后续系列文章 欢迎关注 龙叔运维(公众号) 持续分享运维经验前言 本篇对java的JVM线程共享内存中的方法区进行系统性的讲解。 1、方法区&元空间概念 方法区是《Java虚拟机规范》中规定的一个内存区域,它用于存储已被虚拟
转载
2023-07-16 07:22:06
228阅读
点赞
Java中静态方法和非静态方法的调用是有区别的。①静态方法可以直接调用,如下冒泡排序,只需将冒泡方法设为static方法即可直接调用。1 public class BubbleSort {
2 public static void main(String[] args) {
3 int[] a = {6,5,4,3,2,1,23,14,747};
4
转载
2023-05-19 13:51:25
225阅读
上周的时候写了一篇博客,static关键字 其中有一段:那么静态方法保存在哪里呢? 答案:方法区但是有几个问题需要解决一下: 1.方法区在堆里吗? 不在堆里,java1.7之前,方法区的实现叫做永久代,1.8之后,方法区的实现叫做元空间。 永久代在堆里,元空间是堆外空间。2.元空间=方法区吗? 方法区是 JVM 的规范,而元空间则是 JVM 规范的一种实现。3.元空间在堆里吗? 不在,元空间是堆外
转载
2023-11-01 17:06:18
152阅读
使用外部方法时(不管是static还是非static),都要先new一个对象,才能使用该对象的方法。 举例如下:测试函数(这是错误的):public class Test {
public static void main(String[] args) {
Employee employee = null;
转载
2023-05-27 11:30:28
33阅读
(一)java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口 两者的区别就是:静态代码块是自动执行的
元空间=方法区=非堆可达性分析
原创
2022-03-23 16:08:45
98阅读
目录一、方法区定义(Method Area)二、方法区特点三、方法区存放的内容1.类型信息2.类型的常量池( constant pool)3.域信息4.方法信息5.类变量6.对类加载器的引用7.对Class类的引用8.方法表一、方法区定义(Method Area)《深入理解JVM》书中描述如下:方法区(Method Area)与Java堆一样,是各个线程共享的内存区域。二、方法区特点1.方法区是线
# Java静态方法在堆还是方法区
## 1. 简介
在Java中,静态方法是属于类而不是属于对象的。它们在类加载时被加载到内存中,并且可以直接通过类名调用,而无需实例化对象。然而,有一个常见的疑问,即Java静态方法是存储在堆内存还是方法区内存中。本文将详细介绍Java静态方法在内存中的存储情况。
## 2. 流程图
首先,我们来看一下Java静态方法在内存中的存储流程,如下图所示:
原创
2023-10-16 05:50:48
339阅读
static修饰的变量称为静态变量,static修饰的方法称为静态方法。静态变量and静态方法处于静态区,对于同一个类创建的多个对象来说是共享的。静态变量and静态方法对于每个对象的调用结果都是一样的,无论是改变前或者改变后。成员变量和成员方法处于非静态区,对于同一个类创建的多个对象来说是私有的。静态变量的好处:多个对象公用一个变量,节约堆内存。举例说明以上知识点:class Test {
p
1.1.JVM 运行时内存结构是怎样的?
答:
JVM 启动运行Class文件时会对JVM内存进行切分,我们可以将其分为**线程共享区**和**线程独享区**。
线程共享区:方法区和堆
线程独享区:栈和本地方法栈以及程序计数器如图: 说明在JDK8中持久代(Permanent Generation)部分数据移到了元数据区(Metaspace),在JDK8中已经没有持久代。元空间的本质和永久代
在同一个类中: 对于静态方法,其他的静态或非静态方法都可以直接调用它。 而对于非静态方法,其他的非静态方法是可以直接调用它的。但是其他静态方法只有通过对象才能调用它。静态方法不能被非静态方法覆盖。package web;
import java.util.Scanner;
public class test_1 {
public static void
转载
2023-06-08 17:03:19
156阅读
他们执行顺序为: 静态代码块》普通代码块》构造方法》静态成员方法》普通成员方法之前就说了静态代码块是自动执行的,也就是程序已启动就加载了所以静态代码块是最先执行的,二非静态代码块与静态代码块都是在JVM加载时启动,都比构造方法先执行。而静态方法要比实例方法效率更高,静态方法是在类声明的时候就加载到内存里,实例方法需要通过new关键词创建对象调用。而执行到new关键字时会首
转载
2024-01-13 21:38:34
43阅读
所谓的代码块就是一段独立的代码空间,那什么是静态代码块呢?说白了,静态代码块就是用static修饰的代码块,关于静态代码块的概念不多说,不过你需要知道它的一个特点,那就是随着类的加载而执行,而且只执行一次用代码验证静态代码块随着类的加载而执行,且执行一次class StaticDemo{
//静态代码块
static {
System.out.println("静态代码块被执行");
}
void
导语:Java语言static的静态属性是用来修饰成员变量和成员函数,下面让我们一起了解一下这种关键词吧!1、static关键字:1静态的意思,用来修饰成员变量和成员函数2静态的特点:随着类的加载而加载优先于对象存在对所有对象共享可以被类名直接调用3静态的注意事项A:静态方法只能访问静态成员为什么:因为静态的内容是随着类的加载而加载,它是先进内存的。B:静态方法中不能使用this,super关键字
转载
2023-08-17 00:08:34
49阅读
文章目录方法区(实现方式:永久代|元空间)方法区内部结构类型信息属性信息方法信息方法区的演进细节 方法区(实现方式:永久代|元空间)首先明确:只有Hotspot才有方法区的概念。其他虚拟机是不存在这一概念的。方法区是规范,是逻辑概念,原则上如何实现方法区属于虚拟机实现细节,不受《Java虚拟机规范》管束,并不要求统一。 所以永久代和元空间都是HotSpot实现方法区这一概念的方式。Java8之前
转载
2023-12-14 14:30:13
42阅读
# Java静态方法属于方法区吗?
在Java中,静态方法是属于类的方法,而不是属于对象的方法。静态方法不需要创建对象实例就可以直接调用,被所有对象所共享,可以通过类名直接调用。那么,静态方法到底是属于方法区吗?让我们通过下面的代码示例来一探究竟。
## 代码示例
```java
public class StaticMethodExample {
public static voi