JVM调优简要思想及简单案例-代码执行与内存区域

52 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

JVM调优简要思想及简单案例-代码执行与内存区域

以下是一段代码的执行,对应在JVM中的简要流程:

  1. 程序启动,比如一个简单的main方法,JVM创建一个线程去执行main方法
  2. 在main方法中,JVM对需要使用到的类进行加载
  3. 程序计数器会同时记录执行到哪一段代码
  4. 虚拟机栈保存线程的在执行过程中创建的局部变量
  5. 代码执行过程中创建各种对象,并放在堆中保存 ......

首先程序启动,执行入口都会有一个main方法,那VJM它也会创建一个线程去从main方法开始执行。

main方法中,或者其他方法中,都会记录在哪段代码里,分别会使用到哪些类,JVM它会把这些相应的类进行加载。

执行代码的时候需要能有一个程序,也就是程序计数器,记录执行到哪一段代码。

有虚拟机栈会保存变成一些局部变量。

然后是堆中,线程中创建的各种对象,都会放在堆中保存。

。。。。。。(其他过程略)

引出的问题:

前面有提到过,一段代码,其实主要是创建对象和执行一些方法什么的。我们也提到过,JVM优化,其实主要是针对堆一块,堆这一块主要是保存对象实例的。

程序在执行过程中,其实会有不断地产生新对象,因为我们一个线程执行完成之后,它会有一些废弃的对象,另外一个线程来创另外一个线程执行的话,它也会有一些新对象的产生。那程序持续地运行,它会不断地产生新对象,这些不再需要的对象我们需要怎么处理?JVM 里面有一个垃圾回收机制,把我们不需要的对象进行回收掉。需要持续保留的对象不会进行回收。