关于Jvm的学习,网上介绍的相关文章视频实在是非常的多,只要随便搜搜都有大把的资料可以学习。但是为什么还是有很多人不了解jvm呢。可能主要就是理解能力不行,或者理解的有问题,以至于学习了很多次,但是总也记不住。
如果就是了解虚拟机,进行简单的调优,其实是比较简单的。我们先来介绍下关于jvm的简单构成。当我们只想java指令的时候,比如先写一个hello.java文件。然后javac编译成hello.class文件,再执行java hello,这个时候就启动了一个jvm。首先从加载类开始,jre运行环境等。将hello.class文件分散存储到jvm对应的位置。
Jvm逻辑上可以分成几个区域,堆、栈、方法区、本地方法区、程序计数器。
堆:保存对象的实体。
栈:保存线程运行时的各种数据。
方法区:保存类里的常量、静态方法、类的模板结构等信息。
本地方法栈:本地方法运行时保存数据等地方。
程序计数器:运行时,线程保存执行指针的地方。
一般情况下,栈里的内容不用管,因为不断的押入弹出,会自动的管理栈的内容,随着进程的运行,该销毁的早就销毁了,不需要做回收。方法区和本地方法栈和计数器都不用管,用到垃圾回收机制的一般都是指的堆里的对象了。
Java编程就时面向对象的编程,不停的产生很多的对象,有些会存活的很长时间,有些可能很快就没用了。无用的对象占据着大量的内存,java开发的好处就时我们不用去关心内存,虚拟机已经帮我们处理好了。
这个非常好用的垃圾自动回收机制,帮了我们大忙,我也还是了解下怎么运行的。
堆内存也会分成好几块,年轻代和老年代和元数据区。年轻代占1/3,老年代占2/3。新生成的对象放在年轻代里代出生区,经过一段时间,年轻带里代from区和to区进行对象回收。经过15次回收后,没有被清理的对象统统进入老年代。
等到老年代差不多满了,就要进行full gc了。这个时候jvm就可能出现短暂的暂停。
我们调优的目的就是经可能的减少full gc的出现。
好了,希望对我有帮助。