JVM003

1.一个方法执行完毕之后会怎么样?

一个方法执行完毕以后,此时一旦方法的栈帧出栈,那么大家会发现那个栈帧里的局部变量也就没有了

就是说,没有任何一个变量指向Java堆内存里的 实例对象了

此时大家发现了,Java堆内存里的那个实例对象已经没有人引用他了,这个对象实际上已经没用了。

该干的事儿都干完了,现在你还让他留在内存里干啥呢?大家要知道,内存资源是有限的。

一般来说,我们会在一台机器上启动一个Java系统,机器的内存资源是有限的,比如4个G的内存

然后我们启动的Java系统本质就是一个JVM进程,他负责运行我们的系统的代码,那么这个JVM进程本身

也是会占用机器上的部分内存资源,比如占用2G的内存资源。

那么我们在JVM的Java堆内存中创建的对象,其实本质也是会占用JVM的内存资源的。所以大家看到这里,

心中应该务必明白一个核心点:我们在Java堆内存里创建的对象,都是占用内存资源的,而且内存资源是

有限的。

2.不再需要的那些对象应该怎么处理 ?

【JVM的垃圾回收机制】 JVM本身是有垃圾回收机制的,他是一个后台自动运行的线程 你只要启动一个JVM

进程,他就会自带这么一个垃圾回收的后台线程。这个线程会在后台不断检查JVM堆内存中的各个实例对象

如果某个实例对象没有任何一个方法的局部变量指向他,也没有任何一个类的静态变量,包括常量等地方在

指向他。那么这个垃圾回收线程,就会把这个没人指向的实例对象给回收掉。从内存里清楚掉,不断释放

内存资源

到此为止,相信大家就很清晰明了。到底什么是JVM中的垃圾,什么又是JVM的垃圾回收

 

执行多个方法的调用时,如何把方法的栈帧压入线程的Java虚拟机栈?

栈帧里如何存放局部变量?

如何在Java堆里创建实例对象?

如何让局部变量引用那个实例对象?

方法运行完之后如何出栈?

垃圾回收是如何运行的?

 

posted @ 2021-05-19 14:59  imtm  阅读(19)  评论(0)    收藏  举报