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

如果我们不从类、类方法和大小信息中创建对象,在执行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堆中来回复制数据。

38220

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.3K61
  • Java面试- JVM 内存模型讲解

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

    80810

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

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

    63340

    【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.2K20

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

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

    27010

    还不会JVM,是准备家里蹲吗?

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

    31840

    【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)在不同情况下使用其他例程的不同组合加载到内存中。

    80930

    【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)在不同情况下使用其他例程的不同组合加载到内存中。

    68310

    金三银四面试: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后,对应的运行时常量池就被创建出来。

    51320

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

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

    47110

    JVM内存结构概述

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

    25720

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

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

    3.2K21

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

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

    13810

    吐血推荐,想进BAT必看

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

    42630

    JVM(一)

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

    33520

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

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

    1.2K12

    快手校招一面讲解

    java编译器javac,java调试器jdb. 2讲讲java类加载 java程序运行时,当需要使用某个类的时候,jvm需要检验该类是否被加载到了内存中,如果没有加载,则通过类加载器将类的字节码文件加载到内存中...16 线程如何创建 通过两种方式进行创建一种是继承Thread类,另一种是实现Runnable接口,他们都需要重写run方法 17 继承Thread和实现Runnable接口的区别,这两者的继承关系 继承...每个对象都有一个与之关联的锁和一个计数器,当计数器为 0 时表示锁是可用的,当一个线程首次进入 synchronized 块时,它会尝试获取锁并将计数器加一。...如果该线程再次进入同一个 synchronized 块,计数器会再次加一。当线程退出 synchronized 块时,计数器会减一。只有当计数器减为 0 时,锁才会释放。...通过在代码块方法,条件上面加上这个关键词来实现线程安全,具体实现机制涉及到对象头的 monitor 字段和 monitor 对象的进入和退出、等待队列的管理等。

    5100

    jvm系列(二):JVM内存结构

    Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。...方法的执行都是伴随着线程的。原始类型的本地变量以及引用都存放在线程栈中。而引用关联的对象比如String,都存在在堆中。...虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。...每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。...局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。

    94440
    领券