1.了解堆,栈,常量池
(1)堆:存放所有new出来的对象(实例化的对象);
(2)栈:存放基本数据变量和对象的引用,对象(new出来的对象)本身不存在在栈中,
而是存放在堆中或者常量池中(字符串对象存放在常量池中);
(3)常量池:存放基本类型常量和字符串常量。
(4)对于字符串(String是类):其对象变量都是存储在栈中的,如果是编译期已经创建好
(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。
2.区域划分
JVM五个核心区域:
1.程序计数器:记录当前线程锁执行的字节码行号指示器。(私有)
2.虚拟机栈:用于存储局部变量表、操作数栈、动态链接、方法出口等信息。(私有)
3.本地方法栈:和Java虚拟机栈类似,不过是为JVM用到的Native方法服务。(私有)
4.堆:存放实例化数据。(共享)
5.方法区:存放类信息、常量、静态变量以及即时编译器编译后的代码等数据。(共享)
当虚拟机发现某个方法或代码块的运行特别频繁,为了提高热点代码的执行效率,在运行时,
虚拟机将会把这些代码编译成本地机器码,并以各种手段尽可能地进行代码优化,这个过程就叫即时编译,
共享: 堆和方法区是所有线程共享的资源
3.JDK1.8使用元空间代替了永久代
为什么舍弃永久代:永久代在使用中容易出现内存经常不够用或发生内存泄露
区别:元空间并不在虚拟机中,而是使用本地内存。
元空间了解:
- 元空间是JDK1.8之后出现的,之前使用的是永久代
- 元空间是方法区的一种实现方式,元空间是方法区的在HotSpot jvm 中的实现
- 元空间存放着类的信息、方法数据、方法代码、常量池等
- 编译的时候代码里的字符串就会被编译成对象,然后被堆里的引用对象引用。
- 元空间并不在虚拟机中,而是使用本地内存。
4.
原文地址:http://www.cnblogs.com/wang1999an/p/16832983.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性