一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
JVM调优简要思想及简单案例-代码执行与内存区域
以下是一段代码的执行,对应在JVM中的简要流程:
- 程序启动,比如一个简单的main方法,JVM创建一个线程去执行main方法
- 在main方法中,JVM对需要使用到的类进行加载
- 程序计数器会同时记录执行到哪一段代码
- 虚拟机栈保存线程的在执行过程中创建的局部变量
- 代码执行过程中创建各种对象,并放在堆中保存 ......
首先程序启动,执行入口都会有一个main方法,那VJM它也会创建一个线程去从main方法开始执行。
main方法中,或者其他方法中,都会记录在哪段代码里,分别会使用到哪些类,JVM它会把这些相应的类进行加载。
执行代码的时候需要能有一个程序,也就是程序计数器,记录执行到哪一段代码。
有虚拟机栈会保存变成一些局部变量。
然后是堆中,线程中创建的各种对象,都会放在堆中保存。
。。。。。。(其他过程略)
引出的问题:
前面有提到过,一段代码,其实主要是创建对象和执行一些方法什么的。我们也提到过,JVM优化,其实主要是针对堆一块,堆这一块主要是保存对象实例的。
程序在执行过程中,其实会有不断地产生新对象,因为我们一个线程执行完成之后,它会有一些废弃的对象,另外一个线程来创另外一个线程执行的话,它也会有一些新对象的产生。那程序持续地运行,它会不断地产生新对象,这些不再需要的对象我们需要怎么处理?JVM 里面有一个垃圾回收机制,把我们不需要的对象进行回收掉。需要持续保留的对象不会进行回收。