qq_38668387
Jsonol
采纳率100%
2018-07-02 06:41

关于java类生命中周期

20
已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • ajax_yan 励志重写JDK 3年前

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

    点赞 评论 复制链接分享
  • weixin_42524654 weixin_42524654 3年前

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

    点赞 评论 复制链接分享
  • huang931027 IAmObject 3年前

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

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

    点赞 评论 复制链接分享
  • xinnian468153 迷路的公民 3年前

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

    点赞 1 评论 复制链接分享
  • weixin_41124535 weixin_41124535 3年前

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

    点赞 1 评论 复制链接分享
  • ws_tan 一只努力飞翔的鱼 3年前

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

    点赞 1 评论 复制链接分享
  • tjhdaxia tjhdaxia 3年前

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

    点赞 1 评论 复制链接分享

为你推荐