首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果我们不从类、类方法和大小信息中创建对象,在执行Program时还会加载到ram中吗?

在执行Program时,如果我们不从类、类方法和大小信息中创建对象,那么不会将这些信息加载到RAM中。在Java中,类和类方法是在运行时动态加载的,只有在需要使用它们时才会被加载到RAM中。这种动态加载的机制使得Java具有更高的灵活性和可扩展性。

在执行Program时,JVM会首先加载程序的入口类,然后根据程序的执行流程逐步加载所需的类和类方法。当需要创建对象时,才会将该对象的类信息加载到RAM中。类信息包括类的结构、字段、方法等。类方法则是在类加载时被加载到RAM中,并与类信息一起存储。

如果没有创建对象,那么类和类方法的信息就不会被加载到RAM中。这意味着在执行Program时,只有程序的入口类和相关的类和类方法会被加载到RAM中,其他未使用到的类和类方法则不会占用RAM空间。

这种机制有助于减少内存的占用,提高程序的执行效率。同时,它也提供了更好的代码组织和管理方式,可以根据需要动态加载所需的类和类方法,避免不必要的资源浪费。

总结起来,如果我们不从类、类方法和大小信息中创建对象,在执行Program时不会加载这些信息到RAM中,只有在需要使用它们时才会进行加载。这种动态加载机制使得Java具有更高的灵活性和可扩展性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JVM运行时数据区域及GC

Class文件除了有的版本、字段、方法、接口等描述信息外,还有一项信息是常量池(ConstantPool Table),用于存放编译期生成的各种字面量符号引用,这部分内容将在加载后存放到方法区的运行时常量池中...虚拟机栈描述的是Java方法执行的内存模型:每个方法执行的时候都会同时创建一个栈帧(StackFrame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。...每一个方法被调用直至执行完成的过程就对应着一个栈帧虚拟机栈从入栈到出栈的过程。JVM Stack可以被实现成固定大小,也可以根据计算动态扩展。...如果采用固定大小的JVM Stack设计,那么每一条线程的JVM Stack容量应该在线程创建独立地选定。...这样能在一些场景显著提高性能,因为避免了Java堆Native堆来回复制数据。

37720

Android Linker 与 SO 壳技术

load_library 函数呈现了 SO 装载链接的整个流程,主要有3步: 装载:创建ElfReader对象,通过 ElfReader 对象的 Load 方法将 SO 文件装载到内存 分配soinfo...ElfReader::Load 方法首先读取 SO 的elf header,再对elf header进行验证,之后读取program header,根据program header 计算 SO 需要的内存大小并分配相应的空间...将 program header 在内存单独映射一份,用于解析program header 临时使用, SO 装载到内存后,便会释放这块内存,转而使用装载后的 SO program header...如果 sym 不为0,则查找导入符号的信息 如果 sym 不为0,则继续使用 sym 符号表获取符号信息,从符号信息中进一步获取符号的名称。...随后调用 soinfo_do_lookup 函数在所有依赖的 SO 根据符号名称查找符号信息,返回值类型为 elf32_sym,同时还会返回含有该符号的 SO 的 soinfo( lsi ),如果查找成功则该导入符号的地址为

3.1K61
  • Java面试- JVM 内存模型讲解

    JDK1.7 版本,指定的 PermGen 区大小为 8M,由于 PermGen 的元数据信息每次 FullGC 的时候都可能被收集,回收率都偏低,成绩很难令人满意;还有,为 PermGen...这其中,信息又包括了的版本、字段、方法、接口信息信息 JVM 执行某个的时候,必须经过加载、连接、初始化,而连接又包括验证、准备、解析三个阶段。...加载的时候,JVM 会先加载 class 文件,而在 class 文件便有的版本、字段、方法接口等描述信息,这就是信息。...例如: 的一个字符串常量 class 文件,存放在 class 文件常量池中的。...当创建一个线程,会在虚拟机栈申请一个线程栈,用来保存方法的局部变量、操作数栈、动态链接方法返回地址等信息,并参与方法的调用返回。

    80010

    2019年JVM最新面试题,必须收藏它

    虚拟机栈描述的是Java方法执行的内存模型:每个方法执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。...每一个方法被调用直至执行完成的过程,就对应着一个栈帧虚拟机栈从入栈到出栈的过程。...5、什么是的加载 的加载指的是将的.class文件的二进制数据读入到内存,将其放在运行时数据区的方法区内,然后堆区创建一个java.lang.Class对象,用来封装方法区内的数据结构。...、连接、初始化、使用卸载,其中前三部是的加载的过程,如下图: 加载,查找并加载的二进制数据,Java堆创建一个java.lang.Class对象 连接,连接又包含三块内容:验证、准备、...然而其中的pop方法却存在内存泄露的问题,当我们用pop方法弹出栈对象,该对象不会被当作垃圾回收,即使使用栈的程序不再引用这些对象,因为栈内部维护着对这些对象的过期引用(obsolete reference

    62640

    【STM32H7教程】第80章 STM32H7的QSPI 总线应用之QSPI Flash的MDK下载算法制作

    80.2.1 程序能够通过下载算法下载到芯片的核心思想 认识到这点很重要:通过MDK创建一批与地址信息无关的函数,实现的功能主要有初始化,擦除,编程,读取,校验等,然后MDK调试下载阶段,会将算法文件加载到芯片的内部...查看Flash算法是否FLM文件。如果没有,操作失败。如果在: 加载算法到RAM执行Init函数。 加载用户到RAM缓冲。 执行Program Page页编程函数。...校验就是axf文件中下载到芯片的程序实际下载的程序读出来做比较。 查看Flash算法是否FLM文件。如果没有,操作失败。如果在: 加载算法到RAM执行Init函数。...查看校验算法是否存在 如果有,加载应用程序到RAM执行校验。 如果没有,计算CRC,将芯片中读取出来的数据RAM中加载应用计算输出的CRC值做比较。 执行Uninit函数。...读取和校验函数 我们程序未做读取和校验函数。 (1) 如果程序未做读取函数,那么MDK会以总线方式进行读取,这也是为什么每个函数执行完毕都设置为内存映射模式的原因。

    1.1K20

    浅析Python基础知识之面向对象

    目前我们的需求是统计某个人使用的手机品牌,屏幕大小,什么颜色,运行内存大小,存储大小,像素,电池大小,价格,以及这个人主要用来做什么。...所以我们规定手机这个对象必须有这些参数,用方法写出来的程序就是这样的: class Phone: def __init__(self, name, screen_size, color, ram...,但是却不是同一个对象,就像两个一样的手机,不同人的手机,自己的手机丢了,不能以为两个手机一样,就说别人的手机就是自己的。...如果有特殊需要,如两个不同的手机对象,只要名称相同就认为相等,就需要重写eq方法。...假如我们给每个实例化的手机一个同样的参数,就有些麻烦,因此介绍以下类属性:所有实例化对象都拥有的属性。

    26410

    【STM32F429开发板用户手册】第47章 STM32F429的SPI 总线应用之SPI Flash的MDK下载算法制作

    47.2.1 程序能够通过下载算法下载到芯片的核心思想 认识到这点很重要:通过MDK创建一批与地址信息无关的函数,实现的功能主要有初始化,擦除,编程,读取,校验等,然后MDK调试下载阶段,会将算法文件加载到芯片的内部...查看Flash算法是否FLM文件。如果没有,操作失败。如果在: 加载算法到RAM执行Init函数。 加载用户到RAM缓冲。 执行Program Page页编程函数。...校验就是axf文件中下载到芯片的程序实际下载的程序读出来做比较。 查看Flash算法是否FLM文件。如果没有,操作失败。如果在: 加载算法到RAM执行Init函数。...查看校验算法是否存在 如果有,加载应用程序到RAM执行校验。 如果没有,计算CRC,将芯片中读取出来的数据RAM中加载应用计算输出的CRC值做比较。 执行Uninit函数。...选择“ ROPI”选项,可以避免用户不得不将代码加载到内存的特定位置。这对于以下例程特别有用: (1)加载以响应运行事件。 (2)不同情况下使用其他例程的不同组合加载到内存

    78830

    【STM32F407开发板用户手册】第36章 STM32F407的SPI 总线应用之SPI Flash的MDK下载算法制作

    36.2.1 程序能够通过下载算法下载到芯片的核心思想 认识到这点很重要:通过MDK创建一批与地址信息无关的函数,实现的功能主要有初始化,擦除,编程,读取,校验等,然后MDK调试下载阶段,会将算法文件加载到芯片的内部...查看Flash算法是否FLM文件。如果没有,操作失败。如果在: 加载算法到RAM执行Init函数。 加载用户到RAM缓冲。 执行Program Page页编程函数。...校验就是axf文件中下载到芯片的程序实际下载的程序读出来做比较。 查看Flash算法是否FLM文件。如果没有,操作失败。如果在: 加载算法到RAM执行Init函数。...查看校验算法是否存在 如果有,加载应用程序到RAM执行校验。 如果没有,计算CRC,将芯片中读取出来的数据RAM中加载应用计算输出的CRC值做比较。 执行Uninit函数。...选择“ ROPI”选项,可以避免用户不得不将代码加载到内存的特定位置。这对于以下例程特别有用: (1)加载以响应运行事件。 (2)不同情况下使用其他例程的不同组合加载到内存

    65310

    还不会JVM,是准备家里蹲

    文章目录 JVM体系结构 加载器双亲委派机制 沙箱安全机制 本地方法栈 程序计数器 方法区 栈 堆 创建对象过程 对象访问方式 垃圾判断 四种引用 GC算法 GC收集器 相关推荐(面试专栏查看更多)...加载器双亲委派机制 ---- 从源代码.java文件编译成.class字节码文件后,是通过加载器ClassLoader文件字节码内容加载到内存,并将这些静态数据转换成方法区的运行时数据结构,然后堆中生成一个代表这个的...大部分情况下,对象首先会在Edun区域分配,一次新生代垃圾回收后,如果对象还存活,则会进入S0或S1,并且对象的年龄还会加1,当它的年龄增加到一定程度(默认15岁),就会晋升到老年代。...分配内存 接下来JVM将为新生对象分配内存,对象所需内存大小加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从堆划分出来,分配方式有指针碰撞空闲列表两种,选择那种分配方式是由堆是否规整决定的...执行init方法 从虚拟机视角看,做完上面工作后,一个新对象就产生了。但从Java程序视角来看,对象创建才刚开始,方法还没有执行,所以字段都还为零。

    31440

    金三银四面试:C#.NET面试题中高级篇3,含答案解析

    2.请利用 foreach ref 为一个数组的每个元素 1 3.如何针对不同的异常进行捕捉? 4.如何避免类型转换的异常? 5.Serializable特性.NET中有什么作用?...6..NET的委托是什么? 7..NET可以自定义委托? 8 .NET默认的委托类型有哪几种? 9.什么是泛型委托? 10. 什么是匿名方法?...其中有些是确定可以转换的(比如将一个子类类型转为父类型),而有些则是尝试性的(比如将基引用的对象转换成子类)。当执行常识性转换我们就应该做好捕捉异常的准备。...而.NET委托完全不同,委托是类型安全的,它定义了返回类型参数的类型。委托不仅包含对方法的引用,也可以包含对多个方法的引用。---->详解7..NET可以自定义委托?...定义委托基本上就是定义一个新的,所以可以在任何地方定义的相同地方定义委托,也就是说,可以另一个的内部定义,也可以在任何的外部定义,还可以名称控件把委托定义为定义为顶层对象

    1.9K30

    JVM(一)运行时数据区

    整个程序执行过程,JVM会用一段空间来存储程序执行期间需要用到的数据相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。...JVM规范规定,如果线程执行的是非native方法,则程序计数器中保存的是当前需要执行的指令的地址;如果线程执行的是native方法,则程序计数器的值是undefined。...方法,存储了每个信息(包括的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。...Class文件除了的字段、方法、接口等描述信息外,还有一项信息是常量池,用来存储编译期间生成的字面量符号引用。...方法区中有一个非常重要的部分就是运行时常量池,它是每一个或接口的常量池的运行时表示形式,接口被加载到JVM后,对应的运行时常量池就被创建出来。

    50820

    2019年JVM面试都问了什么?快看看这22道面试题!(附答案解析)

    隐式加载指的是程序使用 new 等方式创建对象,会隐式地调用的加载器把对应的载到 JVM 。显示加载指的是通过直接调用 class.forName()方法来把所需的载到 JVM 。...• 非 RAM 存储:硬盘等永久存储空间。 • 堆内存:new 创建对象和数组,由 Java 虚拟机自动垃圾回收器管理,存取速度慢。... JVM ,有一个垃圾回收线程,它是低优先级的,正常情况下是不会执行的,只有虚拟机空闲或者当前堆内存不足,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合,进行回收。...如果对象可达性分析没有与 GC Root 的引用链,那么此时就会被第一次标记并且进行一次筛选,筛选的条件是是否有必要执行finalize() 方法。...对于 GC 来说,当程序员创建对象,GC 就开始监控这个对象的地址、大小以及使用情况。通常,GC 采用有向图的方式记录管理堆(heap)的所有对象

    47010

    Java虚拟机(JVM)面试题(2020最新版)

    其实可以一句话来解释:的加载指的是将的.class文件的二进制数据读入到内存,将其放在运行时数据区的方法区内,然后堆区创建一个 java.lang.Class对象,用来封装方法区内的数据结构...然后内存空间初始化操作,接着是做一些必要的对象设置(元信息、哈希码…),最后执行方法。 为对象分配内存 加载完成后,接着会在Java堆划分一块内存分配给对象。...垃圾回收器可以马上回收内存?有什么办法主动通知虚拟机进行垃圾回收? 对于GC来说,当程序员创建对象,GC就开始监控这个对象的地址、大小以及使用情况。...JVM的永久代中会发生垃圾回收 垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。...对象 Survivor 区每「熬过」一次 Minor GC 年龄就 1,当年龄达到一定程度(默认 15) 就会被晋升到老年代。 虚拟机加载机制 简述java加载机制?

    3.1K21

    Python怎么使用爬虫获取网页内容

    现在先不用管看不懂的代码,还记得我们看到的第一条新闻?“今日好价………………”。(你的暗号)我们 VS Code 通过 CTRL + F 调出搜索面板,搜索“今日好价”(暗号)。...所以调用这个模块的所有函数的前面都需要模块名,并用点符号连接。response 对象的 data 属性也是一个对象,是一个 bytes 类型的对象。...Python ,读取文件保存文件都是通过文件对象来完成的。接下来,我们通过实际的例子来了解这个技术。...,我们存储 fo 变量fo = open("jiandan.html","w", encoding="utf-8")# 调用文件对象的 write 方法,将我们上面存储着网页内容的字符春变量,html_content...同时还会有一个提示,说明这个浏览器窗口是在被程序控制的,如下图所示。 如果代码运行出错,提示找不到 chromedriver。

    13610

    JVM原理最全、清晰、通俗讲解,五天40小吐血整理

    (8)如果在堆没有内存完成实例的分配,并且堆也无法再扩展,将会抛出OutOfMemoryError异常。 方法区(Method Area):(1)虚拟机启动的时候创建。(2)所有jvm线程共享。...类型变量、field自动信息方法信息,处理逻辑的指令集,我们仔细想想一个里面也就这些东西,而堆存放是对象和数组,咋一看好像方法区跟堆的作用是一样的。...例如我们使用tomcat启动一个spring工程,通常启动过程中会加载数据库信息,配置文件的拦截器信息,service的注解信息,一些验证信息等,其中的信息就会率先加载到方法区。...但如果我们想让程序启动的快一点就会设置懒加载,把一些验证去掉,如一些信息的加载等真正使用的时候再去加载,这样说明了方法区的内容可以先加载进去,也可以使用到的时候加载。...36,方法区,栈、堆之间的过程 加载器加载的信息放到方法区,–》执行程序后,方法区的方法压如栈的栈顶–》栈执行压入栈顶的方法–》遇到new对象的情况就在堆开辟这个的实例空间。

    1.1K12

    JVM内存结构概述

    前言 JVM是Java中比较难理解掌握的一部分,也是面试中被问的比较多的,掌握好JVM底层原理有助于我们开发写出效率更高的代码,可以让我们面对OutOfMemoryError不再一脸懵逼,可以用掌握的...虚拟机栈描述的是Java方法执行的内存模型:每个方法执行的同到都会创建一个栈帧(Stack Frame)用于存储局部量表、操作数栈、动态链接、方法出口等信息。...拿下面代码举例,程序执行main(),main()先压入栈顶,然后main()方法new了一个Math对象,math变量是指向堆Math对象的引用,math变量就属于局部变量表,创建Math对象之后...Class文件除了有的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生产的各种字面量符号引用,这部分内容加载后进入方法区的运行时常量池中存放。...Java堆是线程共享的,虚拟机启动创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

    25020

    吐血推荐,想进BAT必看

    隐式加载指的是程序使用 new 等方式创建对象,会隐式地调用的加载器把对应的载到 JVM 。... JVM ,有一个垃圾回收线程,它是低优先级的,正常情况下是不会执行的,只有虚拟机空闲或者当前堆内存不足,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合,进行回收。...(或者 GC 对象的判定方法) 判断一个对象是否存活有两种方法: 引用计数法 所谓引用计数法就是给每一个对象设置一个引用计数器,每当有一个地方引用这个对象,就将计数器一,引用失效,计数器就减一。...如果对象可达性分析没有与 GC Root 的引用链,那么此时就会被第一次标记并且进行一次筛选,筛选的条件是是否有必要执行 finalize() 方法。...对于 GC 来说,当程序员创建对象,GC 就开始监控这个对象的地址、大小以及使用情况。通常,GC 采用有向图的方式记录管理堆(heap)的所有对象

    42330

    JVM(一)

    其次,就是main 线程执行main方法的时候,会在main线程关联的java虚拟机栈里,压入一个main方法的帧栈,接着发现需要创建ReplicaManager的实例对象,此时就会加载ReplicaManager...载到内存 然后一个Replication的对象实例分配到java堆内存,然后main方法的帧栈里的局部变量引入一个replication变量,让他引用ReplicaManager对象java堆内存的地址..., 接着,main线程开始执行RelicaManager对象方法,会一次执行方法对应的帧栈执行方法之后,再把方法对应的帧栈从java虚拟机栈里出栈。...永久代 JVM里的永久代其实就是我们之前说的方法区,可以理解就是所谓的永久代,你可以认为永久代就是放一些信息方法区会进行垃圾回收,满足下面条件就可以回收引用 首先该类的所有实例对象都已经从...,甚至几十MB,同时系统的CPU,资源性能急剧下降,就会导致请求变慢,最后Minor GC之后,但是还会有几十MB没有被回收,慢慢的就会导致进入老年代 如果进入老年代,那就会更加糟糕,因为老年代的GC

    32720

    单片机到底是如何软硬件结合的(深度好文)

    3 block 1 内,有两段SRAM,总共128K,这个空间,也就是我们前面说的内存,存放程序使用的变量。如果需要,也可以把程序放到SRAM运行。407不是有196K?...然后跳到__main执行,__main函数是什么函数? 是我们main.c定义的main函数?后面我们再说这个问题。...FromELF,创建hex文件,FromELF是一个好工具,需要自己添加到option才能用 map文件配置 更多编译具体信息map文件MDK Options我们可以看到,所有信息都放在\Listings...文件map 再往上,就是文件MAP了,也就每个文件的代码段(函数)跟变量ROM跟RAM的位置。...RO Size等于代码只读变量。 RW Size等于读写变量(包括自动初始化为0的),这个也就是RAM大小。 ROM Size,也就是我们编译之后的目标文件大小,也就是FLASH的大小。但是?

    1.7K32

    JVM系列(1) JVM内存模型,双亲委派机制沙箱安全机制

    Java堆是被所有线程共享的一块内存区域,虚拟机启动创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。...局部变量表所需的内存空间在编译期间完成分配,当进入一个方法,这个方法需要在帧中分配多大的局部变量空间是完全确定的,方法运行期间不会改变局部变量表的大小。...装载器 ClassLoader 装载器负责加载 .class 文件,class 文件文件开头有特定的文件标示(cafe babe),将.class文件加载到内存,将其放在运行时数据区的方法区(放的描述信息...)内,然后堆区创建一个java.lang.Class对象,用来封装方法区内的数据结构, ClassLoader 只负责 class 文件的加载,至于它是否可以运行,则由 Execution Engine...3.当BootstrapClassLoader加载到这个.class,它会查找该类是否存在,如果不存在,就往下传递,交给ExtClassLoader,如果ExtClassLoader自己相应的包也没找到对应的

    26620
    领券