JVM003
1.一个方法执行完毕之后会怎么样?
一个方法执行完毕以后,此时一旦方法的栈帧出栈,那么大家会发现那个栈帧里的局部变量也就没有了
就是说,没有任何一个变量指向Java堆内存里的 实例对象了
此时大家发现了,Java堆内存里的那个实例对象已经没有人引用他了,这个对象实际上已经没用了。
该干的事儿都干完了,现在你还让他留在内存里干啥呢?大家要知道,内存资源是有限的。
一般来说,我们会在一台机器上启动一个Java系统,机器的内存资源是有限的,比如4个G的内存
然后我们启动的Java系统本质就是一个JVM进程,他负责运行我们的系统的代码,那么这个JVM进程本身
也是会占用机器上的部分内存资源,比如占用2G的内存资源。
那么我们在JVM的Java堆内存中创建的对象,其实本质也是会占用JVM的内存资源的。所以大家看到这里,
心中应该务必明白一个核心点:我们在Java堆内存里创建的对象,都是占用内存资源的,而且内存资源是
有限的。
2.不再需要的那些对象应该怎么处理 ?
【JVM的垃圾回收机制】 JVM本身是有垃圾回收机制的,他是一个后台自动运行的线程 你只要启动一个JVM
进程,他就会自带这么一个垃圾回收的后台线程。这个线程会在后台不断检查JVM堆内存中的各个实例对象
如果某个实例对象没有任何一个方法的局部变量指向他,也没有任何一个类的静态变量,包括常量等地方在
指向他。那么这个垃圾回收线程,就会把这个没人指向的实例对象给回收掉。从内存里清楚掉,不断释放
内存资源
到此为止,相信大家就很清晰明了。到底什么是JVM中的垃圾,什么又是JVM的垃圾回收
执行多个方法的调用时,如何把方法的栈帧压入线程的Java虚拟机栈?
栈帧里如何存放局部变量?
如何在Java堆里创建实例对象?
如何让局部变量引用那个实例对象?
方法运行完之后如何出栈?
垃圾回收是如何运行的?

浙公网安备 33010602011771号