一:JVM里面有什么东西?
eg:Book book=new Book();
stack head
栈 堆
实例化的时候就已经在加载了。加载器分为BootStrapClassLoader(null)、EXTClassLoader、APPClassLoader。BootStrapClassLoader一般以空显示。
上面的加载器APPClassLoader是EXTClassLoader的儿子,是BootStrapClassLoader的孙子。所以叫做“双亲委派机制”
二:栈(后进来的先出去,相当于坐电梯一样。电梯叫了说明人满了,超载的那个人自觉地出去,就是先来后到,后进先出)
1、特点:
(1)他是后进先出
(2)队列
(3)有一定的容量,所以不可能无限大
2、栈异常:stackOverFlowError(可以用方法无限递归来制造这个错误)递归就是方法自己调用自己,当栈容量被耗尽的时候就会报这个异常
3、JVM系统优化(指的是堆内存调优【你可以在idea里面下载插件,然后看看堆所占用的空间等信息】)
(1)新创建的类放在伊甸园,因为空间有限,放不下了就分配到一区或二区(它们是循环切换的,不知道哪个是一区或二区),一二区不不够放就放到老年代。老年代不够了就回收(GC就是在这个堆中起作用的)。
(2)OOM异常(OutOfMemoryError)(比喻:人口出生率大于死亡率,地球装不下的时候就会报这个异常)
创建这个异常就是死循环给String复制,把堆沾满,让GC回收不过来。
(3)元空间是非堆内存。存在于操作系统内存中,可以进行垃圾回收
(4)设置堆内存,堆JVM进行优化
这些参数都有默认值,可以自己修改它们的值,在VM Options中 请注意不同参数之间的空格-XX:+PrintGCDetails是打印堆的部分信息
网友评论