JVM优化

JVM优化

JDK:是java语言的软件开发工具包(编译、运行等开发工具+JRE)
JRE:是java运行环境,它包括JVM和java系统类库

[b]JVM内存的划分:[/b]
1.java源码文件(.java后缀)会被java编译器编译为字节码文件(.class)(.class它具有跨平台性)
2.由JVM中的类加载器加载各个类的字节码文件,加载完成
3.交由JVM执行引擎执行。
4.在整个执行过程中,由Runtime Data Area(运行时数据区)JVM内存来存储执行期间需要用的数据和相关信息。

简述一下JVM加载class文件的原理机制?
Java跨平台的原理:Java的跨平台是通过Java虚拟机(JVM)来实现的。

  1. Java中通过类加载器来加载class文件的。
  2. BootstrapClassLoader—启动/引导类加载器—加载Java中的根类(java.lang)
    ExtensionClassLoader—扩展类加载器—加载的子类以及扩展类
    AppClassLoader—应用类加载器/系统类加载器—自己写的类
    3.采用的是双亲委派机制
    当加载一个类的时候会先获取本类的类加载器,通过这个类加载器获取其父类加载器,
    通过父类加载器加载当前目录下的class文件。如果父类加载器加载失败,再使用本类的类加载器。

[b] JVM内存包括[/b]:程序计数器(寄存器)、java栈、本地方法栈、方法区、堆

1.程序计数器(寄存器)、java栈、本地方法栈随线程而生、随线程而灭。这几个区域的内存分配和回收都有确定性,不用过多的考虑回收的问题。方法结束,或线程结束,内存自然就跟随回收来了。
a.寄存器:计算当前线程有多少代码在执行(计数和资源调配的作用)
b.本地方法栈:用native修饰,在java中没有方法体
c.java栈:包含局部变量表(基本数据类型、对象引用类型)方法出口(递归造成溢出,方法适当减少栈内存;创建的线程数=剩余内存/栈内存)
d.方法区:储存被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码
e.堆内存:存的对象

说明什么情况下会产生堆溢出?栈溢出?常量池溢出?方法区溢出?
a) 堆溢出:程序分配的内存超过了虚拟机分配的最大内存,(提高xmx来调节)
b) 栈溢出:如果方法运行时需要的栈的深度超过了虚拟机允许的最大栈的深度
c) 常量池溢出:对象大于新生代剩余的内存时,将直接放入老年代,老年代剩余内存还是无法放下时,就会触发垃圾回收器,收集后还不能放入就会内存溢出
d) 方法溢出:持久带溢出可能是运行时常量池溢出,也有可能是方法区保存的class对象没有及时回收,或者class信息占用的内存超过了我们的配置

[b]垃圾回收机制:[/b]
1.从根节点出发,所有被引用的对象(a.栈中引用的变量 b.方法区静态变量所引用的变量)都是存活对象,其他对象就是垃圾
2.垃圾回收机制是由垃圾回收器GC来实现的,GC是后台守护进程,他是低优先级进程,可以根据内存的使用情况动态调整优先级,当内存低于一定程度时,才会运行,所以垃圾回收具有不确定性。

[b]垃圾回收算法[/b]
1.标记清除算法:就是对活着的对象进行标记,清理其他对象,但是循环引用的对象是无法被识别并回收。
优点:效率高
缺点:产生碎片
2.标记整理算法:清理完对象后,产生的内存碎片,首先执行这个方法时,首先要把存活着的对象整理出来,形成一个连续的内存,这样就能释放较大而连续的内存空间。
优点:没有碎片
缺点:效率低
3.复制算法:从根节点开始扫描,为了避免碎片。采用复制的算法,将内存分为两块,一块空着,一块用来存放对象,放对象的内存满了之后,把存活的对象复制到空着的内存中,再将原来的内存清空,一直反复。
优点:效率高,没有碎片
缺点:浪费内存
a.内存分区:新生代、老年代、永久代(方法区)
aa. 新生代分为:伊甸园、
生存区:(from、to)
 新建对象,在伊甸园分配内存
 伊甸园存满,复制到from
 from存满,复制到to,并交换角色
 对象在from,to之间复制15次,晋升到老年代
bb.老年代:
采用标记清除,标记整理的算法,间隔一段时间就会执行一次,当老年代空间内存占到85%,就会执行FULL-GC

垃圾回收器:CMS
G1
1.CMS:并发标记清除
a.STW(Stop The World)时间非常短
b.初始标记(stw)只标记根对象
c.并发标记:与其他java程序并发执行
d.配置的参数较多,使用过于复杂

       2.G1:Garbage First
                 a. 内存被划分为几千个内存块
                 b. 有伊甸园、生存区、老年代   
                 c. 采用的复制算法
                 d.G1会找到垃圾最多的内存块,优先回收
                 e.配置参数简单,只需要配置,目标停顿时间(stw),G1自动调整其他参数,来达到预期的停顿时间
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值