关于java类生命中周期

1.java类的生命周期,从jvm加载class文件到销毁,什么时候会执行加载,
什么时候会执行销毁操作,使用spring框架与否的区别
2.成员变量的生命周期,定时任务中的一个类,成员变量第一次进入类中某方法
会进行赋值,我知道成员变量与类生命周期是相同的,那么在下一次调用这个
类之前都是空闲状态,会被回收吗
3.关于java JVM管理的内存空间,堆栈,方法区,这些抽象的概念,我目前最重要的
应用就是知道他保存的时长,也就是生命周期,所有成员变量,局部变量,静态,常量
都在什么时间开始有,在什么时候变成无。
3.在网上看到关于JVM GC的文章很晕,希望大神能给小弟用通俗易懂的语言描述下

7个回答

JVM是java的运行环境,在项目启动时,首先经过编译器编译,然后字节码文件交给JVM ,JVM去指挥底层机器执行, 说到底 ,java是一个编程语言,而编程语言的作用就是指挥机器运行,言归正传,当项目启动时,会加载一些预加载类,当我们创建对象时,A 啊
A a=new A() a 会指向A的地址,a对象的存活,要看是属于哪个作用域,如果是方法,那么方法执行完毕,这个对象就要被GC回收你也可以自己GC 重写方法,但是不建议 ,因为java已经帮我们实现了

1、java类首先要进行编译成class然后,jvm才进行加载,什么时候销毁,不清楚,理论类运行结束才会销毁;与spring框架算是个容器,你的这个类放到spring的容器里运行了,jvm实际执行的是spring,并非你的类。
2、我认为会被回收
3、静态和常量在初始化的时候就占用了固定的内存区域,理论上只要jvm没有停止就常占内存;而成员变量和局部变量new的时候是生命周期的开始,使用完会被自动回收。

局部变量的作用域就是他的生命周期
类的成员变量,在类的相应的对象销毁的时候销毁

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。

以下纯属个人见解,如果不对请指出。
1.类的生命周期与Spring框架无关。
2.类的成员变量的生命周期从创建类实例开始,到该类实例被GC,才结束。
类实例空闲状态不一定会回收,需要触发GC之后,并且该类实例没有被使用才会回收。使用包括引用,把类实例存到容器不用,也是空闲状态,但是如果容器不释放该实例的引用,该类实例永远不会被GC,当然容器本身被GC了,那就会自动释放引用。
3.这个简单概括,静态变量从class文件加载完毕就会创建,至于什么时候结束,我也不是很清楚;成员变量从类实例被创建开始,直到类实例被GC,局部变量从方法执行开始,直到方法执行完毕才会结束。常量,是final修饰的变量,限制该变量只能进行一次赋值,静态变量,成员变量和局部变量都可以成为常量,所以它的生命周期就是它所修饰的变量类型生命周期。

xinnian468153
迷路的公民 回复qq_38668387: 类生命周期就是一个流程,无论你换哪个框架去管理类,一样要跑这个流程。即使是tomcat之类的容器也一样管理着类,特别是热部署,既涉及加载class也涉及卸载。
接近 2 年之前 回复
qq_38668387
Jsonol 回复xinnian468153: 我的意思就是从class加载到卸载这个生命周期,spring会改变他时间,流程还是一样,这点我理解
接近 2 年之前 回复
xinnian468153
迷路的公民 回复qq_38668387: Spring框架只是管理类,提前为应用初始化类,并把需要的注入的参数提前注入。这个过程中只是导致类初始化时间提前,或者导致GC时间延后。但是不影响类的生命周期,类的生命周期与初始化时间早还是迟无关,是一个周期,不是具体时间。
接近 2 年之前 回复
huang931027
IAmObject 回复qq_38668387: spring 管理类说的是 依赖注入,就是说你用到某个类的时候不用再去new 对象和 JVM没有任何关系 ,spring 只是一个封装了很多方法的工具。
接近 2 年之前 回复
qq_38668387
Jsonol oracle JDK虚拟机 在类被使用到的时候进行加载,spring管理着类,怎么会没关系呢
接近 2 年之前 回复

可以理解为:开始是从方法或类被调用的那一刻,结束则是要看声明变量属于哪个方法或类,该方法或者类被执行完就会连同其声明的变量一同丢给GC(此时生命终止),GC会适时的将这些垃圾从内存中释放掉,
打个比方:垃圾被丢进垃圾箱,虽然是要被清理掉,但是也需要清洁工将垃圾收走才能释放空间。

我给你提供一种思维方式吧, 首先 JVM 是解释执行 class 文件的 ,对于JVM来说,是不知道什么 spring的 ,它只认识class 。 那由于前人在自己的工作中发现的一些可以提高工作效率且能提高代码质量的方法,这牛逼的人把这些方法和思维汇总出来了框架,spring 就是一种框架,它也是一堆堆的class文件呀。希望你能理解到,spring 就是和你写的工具类一样的。

你想了解存活周期这种的,可以百度 新生代、老年代、持久代这些,我觉得应该能帮助你理解。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐