【无标题】

JVM学习总结

1.JVM是什么?
JVM就是一台虚拟的计算机,java程序通过javac等编译器编译成字节码文件,之后通过类加载器将字节码文件加载到内存中,之后JVM虚拟机就会将字节码文件转为能被机器识别的机器指令。说白了JVM就是一个工具,用于将字节码文件转为机器指令。JVM中有几块运行时数据区,比如方法区啊,堆空间啊,虚拟机栈啊,本地方法栈啊,程序计数器等等啊。还有执行引擎啊,执行引擎中还有解释器和编译器,JIT编译器用于缓存热点数据,用于提高字节码转换为机器指令的速度。
2.什么是方法区?
方法区就是一个存类信息,常量,静态变量,即时编译器编译后的代码缓存块等的地方,它是所有线程共享的。
3.什么是堆?
堆是JVM虚拟机管理的最大的一块内存地方,垃圾回收主要在这里。实例几乎都在这里分配内存。
4.什么是程序计数器?
每一个线程都有一个程序计数器,他记录当前线程执行字节码的行号。
5.什么是虚拟机栈?
每个方法开始执行的时候,就会在虚拟机栈中创建一个栈帧,栈帧中存放了局部变量表、方法出口等信息,方法的开始与结束对应了虚拟机栈中的入栈和出栈。
6.什么是本地方法栈?
跟虚拟机栈类似,区别在于它执行的是native方法。

上述是JDK1.6的时候的特性,而在JDK1.7中将字符串常量池和静态变量引入到了堆空间中,在JDK1.8中将方法区也就是永久代彻底删除,变成在直接内存中的元空间,元空间中主要存储类信息。
那么为啥要删除方法区呢?
一方面是Oracle想将JRockit中的优秀特性与hotspot整合,另一方面是因为永久代更容易使Java应用遭遇内存溢出的风险,因为永久代有最大内存的限制,即使不设置也有默认。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值