JVM简易自学

  • 谈谈你对JVM的理解?java8虚拟机的更新?

  • 什么是OOM?什么是栈溢出StackOverFlow?

  • JVM的常用调优参数有哪些?

  • 内存快照如何抓取?怎么分析Dump文件?

  • 类加载器的认识?

学了之后来回答!


1.体系结构

位置-->操作系统之上,包含于JRE之中


2.类加载器+双亲委派机制

双亲委派理解:有相同名字的类-->去找最内层的类加载器的方法(向上委托)

-->保证安全

app-->ext-->boot

3.沙箱机制

安全-->限制代码对资源的访问

4.native+方法区

native:

java作用范围达不到了,要去调底层c语言的库了-->进入本地方法栈,调用本地方法JNI接口,调用本地方法库

-->拓展java使用,融合多种编程语言

方法区

线程共享,共享区间!

接口,构造方法,静态常量,变量,运行常量池

方法区是所有线程共享的内存,在java8以前是放在JVM内存中的,由永久代实现,受JVM内存大小参数的限制,在java8中移除了永久代的内容,方法区由元空间(Meta Space)实现,并直接放到了本地内存中,不受JVM参数的限制(当然,如果物理内存被占满了,方法区也会报OOM),并且将原来放在方法区的字符串常量池和静态变量都转移到了Java堆中

5.HotSpot+堆

我们基本都用HotSpot

堆:一个JVM只有一个Heap,内存大小可以调节

放置:实例化的类对象所有信息-->

  • 新生区

    • 伊甸园

    • 幸存0区-->在垃圾回收活下来了

    • 幸存1区-->和0是动态的,交换位置

  • 老生区-->超过n次垃圾回收活下来了-->XX:MaxTenuringThreshold=n可以自己设定

  • 永久区(java8已经没了,改成元空间)

6.新生区,老年区,永久区

  • 所有new的对象从伊甸区出来

  • 伊甸园满了-->MinorGC-->幸存区

  • 伊甸园,幸存区都满了-->MajorGC-->老年区

  • 老年区满了-->FullGC

永久:一些java运行时的环境,不存在垃圾回收

项目中突然出现oom故障,如何排除?-->内存快照分析工具Jprofiler,MAT

7.GC

作用区:方法区,堆

  • 引用计数-->JVM不用-->判断是否还存活

计数器本身有消耗!死循环!

  • 复制算法

描述一下步骤:

1.Eden到幸存区,道德那个地方变成了from,另一个就是to

2.Eden和from里面的都到to,to变成from,from变成to-->每一次轻GC后Eden和to都是空的

优点:没有内存碎片==缺点:浪费内存的空间

  • 标记清除

标记的留下,没标记的清除

进阶:压缩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值