Java运行时,方法在内存中的存在方式

class A{
public void checkAll(){}

 public void static main(String[] args){

}
}

在运行时内存中main()方法和checkAll()都是以栈的存储方式存在的么?请大神解惑

0

3个回答

有个叫做方法区的地方;
内存总体分为了4个部分,包括 stack segment、heap segment、code segment、data segment。
其中我们程序中用关键字new出来的东西都是存放在heap segment。
程序中的局部变量存放在stack segment,这些局部变量是在具体方法执行结束之后,系统自动释放内存资源(而heap segment中的资源需要java垃圾回收机制来处理)。
程序中的方法,是内存中的code segment中的,而且是多个对象 共享一个代码空间区域。
static静态变量,需要放在内存中的data segment中。

0

栈 是用来存放局部变量的。
方法有专门的方法区存放。

0

main 和checkAll() 在java中是存放在方法区中(相当于C语言的代码段),编译后jvm通过找到main这个标识加载启动程序

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java运行时内存分配(运行时数据区域)
java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的”高墙”,墙外面的人想进去,墙里面的人却想出来。 引用<<深入理解JAVA虚拟机第二版>> 周志明著 参考链接 Xms Xmx PermSize MaxPermSize 区别 java参数罗列 -Xmx和-Xms(设置java堆的大小) -vmargs -Xms128M -Xm...
JAVA 多态(运行时多态和编译时多态)及其内存图解
定义:某一类事物的多种存在方式(一个对象,两种形态) 对象的多态:父类或者接口的引用指向其子类的对象 多态的好处: 提高了代码的扩展性,前期定义的代码可以使用后期的内容 多态弊端: 前期定义的内容不能使用(调用)后期子类的特有方法(就是多态调用的只能是父类)。但如果是继承子类覆盖了父类方法,多态调用的仍是子类的方法! 多态前提: 1、必须有关系(继承、实现) 2、要有覆盖 多态实际...
Java内存分配策略,Java运行时内存分配
Java 内存分配策略Java 程序运行时的内存分配策略有三种,分别是静态分配,栈式分配,和堆式分配,对应的,三种存储策略使用的内存空间主要分别是静态存储区(也称方法区)、栈区和堆区。静态存储区(方法区):主要存放静态数据、全局 static 数据和常量。这块内存在程序编译时就已经分配好,并且在程序整个运行期间都存在。栈区 :当方法被执行时,方法体内的局部变量(其中包括基础数据类型、对象的引用)都在
℃江的观后感 -- Java 虚拟机的方法区、直接内存和运行时常量池
方法区 我们知道方法区,当然是和方法有关,Java虚拟机的作用就两个,存储、运算。其实我们叫其方法区,说明和存储东西有关,但是存什么呢?这块存储的是虚拟机加载的类信息,常亮,静态变量和有个就是即使编译后的代码等数据。方法区一般在hotspot被称为永久代。但是其他Java虚拟机不是这样的概念哈。垃圾回收主要在堆中进行,但也会出现在方法区中,而且效率不高,因为你想想常量池一般定义成常亮就会...
1.Java运行时内存区域
Java运行时数据区域 JVM虚拟机运行时数据区域包括程序计数器,Java虚拟机栈,本地方法栈,Java堆,方法区。此外,java程序运行时也会经常用到本地内存。关于它们的内存分布图如下所示: 下面具体介绍下上面提到的几块内存区域: 程序计数器 一块较小的内存空间,它是当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变该计数器的值来选择下一条需要执行的字节码指令,分支、循环、跳转、...
函数、对象在内存中存在形式
一、php底层内存分区
Java运行时,数据都保存到了什么位置?
程序运行时,对象是怎样进行放置安排的呢?特别是内存是怎么样进行分配的? 1)寄存器:       这是最快的存储区,因为它位于不同于其他存储区的地方:处理器内部。但是寄存器数       量极其有限,所以寄存器根据需求进行分配。我们不能直接控制,也不能在程序中感觉       到寄存器存在的任何迹象。 2)堆栈:       位于通用RAM(随机访问存储器)中,但是通过堆栈指针 可以从处理器那里获...
Java 内存区域-运行时数据区域
  最近在学习JVM 的相关知识。一开始看的比较快,对JVM 运行时数据区域只有一个模糊的概念,不太清楚不同内存区域里面到底存放了那些数据,所以在此记录。   我们都知道Java 与C、C++ 最大的区别就是内存管理领域(Java 有内存动态分配和垃圾收集技术)。在《深入理解Java虚拟机》中描述C、C++ 对内存的管理:对于从事C、C++ 的程序开发人员来说,在内存管理区域,他们即是拥有最高权...
简单通俗了解一个完整的Java程序运行过程(内存分配情况)
1.JVM自动寻找main方法,执行第一句代码,创建一个Test类的实例,在栈中分配一块内存,存放一个指向堆区对象的指针110925。2.创建一个int型的变量date,由于是基本类型,直接在栈中存放date对应的值9。3.创建两个BirthDate类的实例d1、d2,在栈中分别存放了对应的指针指向各自的对象(对象在堆中)。他们在实例化时调用了有参数的构造方法,因此对象中有自定义初始值。调用tes...
Java运行过程出现的内存不足问题
总结个人以及别人给的解释,就heap和perm内存问题做出说明和解决办法。 1 java.lang.OutOfMemoryError: Java heap space 解释: Heap size 设置 JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xm
JAVA_OPTS和内存溢出
JAVA_OPTS ,顾名思义,是用来设置JVM相关运行参数的变量。 JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k" -server:一定要作为第一个参数,在多个CPU时性能佳 -Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些 -Xmx:java heap最大值,使用的最大内存 上面两个值是分配J...
方法和成员变量在内存中的位置
一:在方法中声明的变,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因在方法中生明的变量可以是基本类型的变量,也可以是引用类型的变量,(1)当声明是基本类型的变量的时,其变量名及值(变量名及值是两个概念)是放在方法栈中(2)当声明
Java多态性,从内存的角度分析
this: 最终子类的地址 super:每一层的父类 所以不管每一层的this都是指向最下层子类,如果找不到方法就去上找,直到找到方法 public class Test { public static void main(String[] args) { Animal a = new Dog(); a.shout(); }...
Java的运行时数据区的分类
上图所示为jvm的运行时数据区域划分,一共分为六大部分,分别是程序计数器,Java虚拟机栈,本地方法栈,Java堆,方法区以及运行时常量池,下面是对这六大区域的介绍。程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器。每一条JVM线程都有自己的PC寄存器;在任意时刻,一条JVM线程只会执行一个方法的代码...
java idea运行时内存不足
报错信息 “E:\Program Files\Java\jdk1.8\bin\java” -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51386,suspend=y,server=n -mx1024m -XX:MaxPermSize=1024m -Drebel.spring_plugin=true -Drebel.hibernate_...
内存分配的三种方式
内存分配有三种方式: 一:从全局存储区域分配:这时内存在程序编译阶段就已经分配好,该内存在程序运行的整个周期都有效,如:全局变量、static静态变量。 二:从栈区分配:在执行函数的时候,函数中的局部变量的存储单元都可以从栈中分配,函数执行结束后这些存储单元都会被自动释放,实现从栈中分配存储单元运算操作内置于处理器的指令集中,效率很高 但是分配的内存容量有限。 三:从堆中分配:也称为动态内存
Java常见面试题—JVM运行时数据区域
JVM—运行时数据区域 JVM在执行JAVA程序时会把它管理的内存区域划分为若干个不同的数据区域,统称为运行时数据区,由图可见JVM程序所占的内可划分成5个部分:程序计数器、虚拟机栈(线程栈)、本地方法栈、堆(heap)和方法区(内含常量池),其中方法区和堆被所有线程共享。下面分别介绍各部分的功能:程序计数器JVM是多线程的,每一个线程都有一个独立的程序计数器(JVM是多线程的,为了线程切换后能恢复
java中数组到底是一种怎么样的存在?
众所周知,在java中数组也是一种对象,而对象在被创建的时候会隐式地调用其构造方法,在字节码中为:new #1 //创建实例并将引用压入栈顶 #1为常量池中此类的符号引用 dup //将栈顶元素复制一份并压栈 invokespeclal #2 //将栈顶引用作为参数顶用构造方法 #2为常量池中构造方法的引用<init>创建数组对象的字节码有newarray,anewarray,以及m...
java中 static变量和方法到底是存在内存什么区域?
JVM内存总体一共分为了  4个部分(stack segment、heap segment、code segment、data segment)  当我们在程序中,申明一个局部变量的时候,此变量就存放在了 stack segment(栈)当中;  当new 一个对象的时候,此对象放在了heap segment(堆)当中;  而static 的变量或者字符串常量 则存在在 data segm
初识JVM及jvm运行时数据区和jvm内存模型的区别
        众所周知Java从95年出世之后就一直处于语言排行榜的 top 前几位,最主要的原因是因为Java的内存管理机制,我们coding 只管new 对象(前提是正常编码)从来基本没有考虑过对象怎么存在,如何销毁释放等问题。其次就是Java 的跨平台性,准确来说应该是Java一次编译多处运行,是基于不同操作系统安装不同的Java运行所需的jvm才能完成如此强大的跨平台运行。       ...
理解Java虚拟机(4)之JVM运行时内存分配管理和对象内存分布
理解Java虚拟机(4)之JVM运行时内存分配管理和对象内存分布读《深入理解Java虚拟机》-周志明 读书笔记classLoader将class文件加载进虚拟机后,就是要开始运行程序员写的代码了,要运行就要分配内存,所以先得了解虚拟机运行时内存分配管理。 JVM在执行的过程中会把它所管理的内存划分若干个不同的数据域,这种区域有不同的用途,数据区域主要分为方法区,虚拟机栈,本地方法栈,堆,程序计算器
二进制在内存中的存放方式
二进制在内存中的存放方式–大小端小端法:低位字节放在内存的低地址端即该值的起始地址,高位字节放在内存的高低址端。 大端法:高位字节放在内存的低地址端即该值的起始地址,低位字节放在内存的高地址端。例如: 5601对应的二进制数为: 00000000 00000000 00010101 11100001 则在内存中的存放的情况如下: 小端法: 分成四个 8 位的
【转载】数组在内存中的存储方式
数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。下面将深入介绍数组在内存中的运行机制。 数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素。 与所有引用变量相同的是,引用变量是访问真实对象的根本方式。也就是...
iOS中四种存储方式
数据储存,首先要明确是是数据结构和存储方式。数据结构就是数据存在的形式,存储方式分两种,分别是内存和闪存。内存存储是临时的,运行时有效的,但效率高,而闪存则是一种持久化存储,但产生I/O消耗,效率相对低。把内存数据转移到闪存中进行持久化的操作称成为归档。 下面介绍四种数据储存方案: NSUserDefaults,用于存储配置信息 SQLite,用于存储查询需求较多的数据 Cor
创建并运行Java运行时代码的三种方式
原文地址: http://www.tianshouzhi.com/api/tutorials/mutithread/62 1 概述 在Java中,创建线程运行时代码有三种方式。 第一种:继承Thread类,覆写其run方法,这种方式我们在之间的案例中已经见过。 第二种:实现Runnable接口,实现run方法,Thread类也实现了Runable接口。 第
java中 static变量和方法到底是存在内存什么区域呢?
JVM内存总体一共分为了  4个部分(stack segment、heap segment、code segment、data segment)  当我们在程序中,申明一个局部变量的时候,此变量就存放在了 stack segment(栈)当中;  当new 一个对象的时候,此对象放在了heap segment(堆)当中;  而static 的变量或者字符串常量 则存在在 data segm
内存中小数的存储形式
内存中,小数是以指数形式存在的。float、double 在内存中的形式如下所示: 小数在被存储到内存前,首先转换为下面的形式: a × 2 n 其中 a 为尾数,是二进制形式,且 1 ≤ a < 2;n 为指数,是十进制形式。 例如对于 19.625,整数部分的二进制形式为: 19 = 1×24 + 0×23 + 0×22 + 1×21 + 1×20 = 10011 小数
java常见的空指针异常及解决方法
摘自java技术栈微信公众号,原创栈长。 公众号传送门 空指针是我们 Java 开发人员经常遇到的一个基本异常,这是一个极其普遍但似乎又无法根治的问题。 本文,栈长将带你了解什么是空指针,还有如何有效的避免空指针。 什么是空指针? 当一个变量的值为 null 时,在 Java 里面表示一个不存在的空对象,没有实际内容,没有给它分配内存,null 也是对象成员变量的默认值。所以,一个对象如果没有进...
Java 各种运行内存问题解决
http://www.wallcopper.com/os/319.html Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded问题的解决办法. 一、异常如下:
浮点型在内存中的存在方式
浮点型在内存中的存在方式
Java虚拟机(JVM)运行时内存区域划分详解
Java虚拟机(JVM)内存区域划分详解 最近一直没有怎么更新自己的博客,主要是由于老哥公司最近的一个招标项目忙得焦头烂额,心力憔悴(ಥ_ಥ),趁着项目的空档期来重构一下以前的一篇关于jvm内存区域划分的博客,仔细阅读了一下之前的博客,大量的文字叙述可能对于读者来说,看到的第一眼就不想读下去了,吸收各方面的意见,为了让初学者更好的理解,趁着这段时间还比较自由,就来重构一下这篇博客。 一、j...
你在java代码中定义的变量存在内存中的哪呢
首先你得知道java虚拟机的基本结构与他们的基本介绍 然后你要知道对象与对象引用是什么 比如 Student stu = new Student(); stu 就是对象引用  new Student()就是你创建的对象  不理解请自行百度 然后你才能理解下边这个表 ...
Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法
我安装Adobe flash cs5完整版,运行后出现 “Java运行时环境初始化时出现错误,你可能需要重装Flash。” 错误。我使用Adobe flash cs4绿色版精简版(带jvm)也出现此错误。   原因分析 adobe cs 5的java运行时(Runtime)放到windows公共目录下面了。 因为adobe 有很多的产品用到了java Runtime 运行时,如果每
解决Tomcat运行内存不足问题
在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat、jboss,weblogic)加载jar包时会出现java.lang.OutOfMemoryError异常。这主要是由于应用服务器的内存不足引起的。这种异常常有以下几种情况(以下以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理):
C++对象在内存中的存放方式
对象占有一定的内存,该内存上存放的是该对象的相关数据,按先后顺序如下: 1、虚表指针:如果该类有虚函数的话,将存放虚表指针,该指针指向该类的虚函数表,即指向表中的第一个元素。续表中存放的是该类虚函数的地址; 2、基类数据成员(如果有基类); 3、自己的数据成员; 对象在调用成员函数时的方式: 1、调用非虚成员函数:其实相当于是非成员函数调用,实现根据对象类型找到该对象所属类,并在
程序运行时数据在JVM中的存放
1 JVM把管理的内存划分不同区域,一些区域随JVM启动而存在,一些区域依赖于用户线程的生命周期。 2 JVM管理的内存包括这几个区域: 程序计数器,Java虚拟机栈,本地方法栈。(线程单独使用) Java堆,方法区,常量池,直接内存。(线程共享)   程序计数器 Program counter register 告诉JVM(?)当前线
Java虚拟机--方法区(运行时常量池)
文章引用: 深入理解Java虚拟机 一 方法区描述 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已经被虚拟机加载的类信息/常量//静态信息/即时编译器编译后的代码等数据.虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却又一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来. 对于习惯在HotSpot虚拟机上开发...
运行时数据结构(1)-java堆
java堆堆的内存划分创建的对象存放在哪里eden 空间TLAB(Thread Local Allocation Buffer)栈(线程逃逸分析技术)对象内存分配,在栈上创建对象就一定是线程安全的吗?对象的生命周期 堆的内存划分 整体划分为年轻代和老年代细分如下: 1. eden 空间 ------------------ 年轻代 2. from survivor 空间 -------- 年轻...
C++中函数在内存中的分布情况
现在我们写一个简单的代码,来看看他们在内存的变化是怎么样的: 函数bbb的地址是:0001 0000 0001 0111 0101 1001 0000 0100 十进制为269965572 函数cc c的地址是:0001 0000 0001 0111 0110 0000 1000 0000 十进制为 269967488 函数main 地址是:0001 0000 0001 01
java程序运行时内存分配
程序运行时,对象是怎么分配内存空间的?  有五个地方可以存储数据: 寄存器:寄存器位于处理器内部,所以是最快的存储区。但是寄存器的数量极其有限,所以寄存器根据需求进行分配。不能直接控制。 堆栈:位于RAM(随机访问存储器)中,可通多堆栈指针从处理器哪里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动。则释放那些内存。这是一种快速分配内存的方法,仅次于寄存器。java系统必须知道存...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习方式 大数据学习方式