前言
工作了一年之久,JVM我还只是了解,说出来有点丢人。所以,我从今天开始,要开始学习JVM了。学习之后都会把我学到的知识发出来,大佬们可以看看我理解的有什么错误。欢迎指正批评。
JVM是什么?
这个问题是不是很深奥。这就是技术本质。
1.JVM+核心类库=JRE+开发工具=JDK,现在我用的是JDK8。
Java虚拟机中包括类加载子系统、执行引擎和JVM运行数据区。(明天写类加载子系统。)今天主要说下JVM运行数据区。
正如上面所说的。JVM运行数据区 包括栈、本地方法栈、程序计数器、堆、方法区这五种。
JVM内存分为几个区,每个区的作用
如何判断一个对象是否存在
java中垃圾收集的方法有哪些?
你知道垃圾回收收集器有哪些?
存在线程安全的问题。
看上图,今天主要介绍的是jvm运行数据区中的五大区域。
看到上面这个问题。我脱口而出:JVM包括栈、本地方法栈、程序计数器、堆、方法区。栈是先进后出。其中前面三个是线程私有的。后面两个是线程共享的。每个方法代表一个栈帧。
垃圾回收机制
内存占比
新生代1/3,老年代2/3
Dden :so:s1=8:1:1
垃圾回收机制
当创建一个对象时,会存在堆的伊甸园区,那为什么叫伊甸园区,因为java之父信念基督教。基督教里面的圣经中写道人类从伊甸园区创建。
只要有一个用户登录就会在伊甸园区创建一个对象,当创建的对象在内存中满的时候,就会进行minor GC(垃圾回收),它先进行对象判断,判断是否可以回收,判定的依据是GC Roots(根的可达性判断)。如果这个对象没有被引用,则会被回收掉。然后被引用的对象将会进入幸存区S0。然后用户再次登录,等伊甸园区慢的时候,进行第二次的monor GC,先进行对象判断,判断是否可以回收,判断的已具是GC Roots(根的可达性判断)。如果这个对象没有被引用,则会被回收掉,然后被引用的对象进入S1,S0中对象没有被引用也会被回收掉。如果被引用,则进入S1,对象的年龄加1,在这期间有个阈值,当达到这个阈值时,对象会存入老年代,这叫对象晋升。当老年代的内存快满的时候,在老年代会触发full GC,当full GC产生时,会触发stw(stop the world)停顿,