JVM学习笔记
来源:互联网 发布:c语言输出整数 编辑:程序博客网 时间:2024/06/10 10:13
JDK和JRE的区别
JDK是开发库,而JRE只是运行环境。JRE没有编译器,也没有JAVA API里面非JAVASE API的部分等。eclipse之所以用jre也能运行,是因为IDE内部集成了编译器。
运行时数据区域
程序计数器(program counter register)
存储字节码指令的地址。如果是java方法,则记录对应的地址,如果是native方法,则为undefined。关于字节码指令:http://blog.csdn.net/chenzhp/article/details/1798166
java虚拟机栈(java virtual macheine Stacks)
其存储如下数据:
- 局部变量表
- 操作数栈
- 动态链接
- 方法返回地址
该栈中常见的两种错误:
- StackOverflowError 栈太大。比如线程里面声明太多对象等。
- OutOfmemoryError JVM内存不足。比如线程太多。
本地方法栈(Native Method Stacks)
java虚拟机栈为java方法服务,本地方法栈为native方法服务。
java堆(Java Heap)
放实例和数组,可分为新生代和老年代
方法区(Method Area)
其存储如下数据:
- 类型的常量池:关联的所有类型,域,方法以及符号引用
- 域信息:修饰符、域名、与类型、声明顺序等
- 方法信息: 方法名、返回信息、参数类型、个数等。
- 类静态成员变量
- 对类加载器的引用。声明类采用了哪一个类加载器。只有类加载器一致时才能判定两个类的类型一致
- Class实例的引用。Class.forName()就是以此实现。
运行时常量池(Runtime Constant Pool)
运行时常量池是把Class文件常量池加载进来。存储各种常量。一开始是符号引用,使用到的时候会替换成直接引用。运行期间也可动态更新。可以认为其是class文件常量池的一个动态扩充池。经典的例子String.intern()
参考资料:http://hllvm.group.iteye.com/group/topic/40008,
参考资料:http://blog.sina.com.cn/s/blog_69dcd5ed0101171h.html
直接内存(Direct Memory)
使用native方法时候直接分配的堆外内存。不受jvm控制。但受机器内存限制。
指针和引用的区别
对象引用的实现方式会根据虚拟机的不同有不同实现,一般是指针或者句柄,指针直接指向物理内存地址,句柄则是一种指向指针的指针。因为windows操作系统的对象物理地址经常变化。所以通过句柄这种32位的索引来唯一标识一个windows自身的管理的资源。(窗口或文件,文件包括了本地io和网络io/socket等。)
- JVM 学习笔记
- JVM原理学习笔记
- JVM学习笔记
- JVM原理学习笔记
- JVM 学习笔记
- JVM学习笔记
- jvm学习笔记总结
- JVM学习笔记
- JVM学习笔记
- JVM学习笔记
- jvm学习笔记(一)
- JVM 学习笔记
- JVM 学习笔记
- JVM学习笔记-基础知识
- Dalvik、JVM学习笔记
- JVM 学习笔记
- jvm学习笔记
- JVM学习笔记
- 一致性哈希原理与实现
- kidd风的IOS日志之触摸事件,手势识别,摇晃事件的详解
- spring-data-redis中的坑和误区
- DEA(数据包络分析)程序模板
- 为你的Android应用定制属于你的BaseActivity http://blog.csdn.net/jiahui524
- JVM学习笔记
- 将二叉树拆成链表 Flatten Binary Tree to Linked List
- 挨踢职场求生法则-----我在IT职场打滚超过15年了,从小小的程序员做到常务副总
- 判断int类型是否为空
- html个人模板
- 冒泡,选择,插入排序的效率比较
- □□□ + □□□ = □□□
- Window消息机制
- Matlab做快速傅里叶变换