标签:常量池 空间 char 常量 不能 class 线程 本地 java web
深入分析java web技术内幕 学习笔记
在Java虚拟机规范中将Java运行时数据划分为6种,(其中的域即类的成员)分别为:
◎ PC寄存器数据:
它用于保存当前正常执行的程序的内存地址, JVM规范只定义了Java方法需要记录指针信息,而对于Native方法,并没有要求记录执行的指针地址.pc寄存器所指向的也是当前活动栈(栈顶, 即当前执行的方法)地址
◎ Java栈:
与线程密切相关, 线程中的每个调用的方法都会在栈中有一个对应的栈针,栈中主要存放一些基本类型的变量数据(int、short、long、byte、float、double、boolean、char)和对象句柄(引用),这些变量都是局部变量,也是GC的根节点对象.
◎ 堆:
存放类文件的java副本对象的以及继承自父类的非静态属性. 堆是被所有线程共享的, 需要注意同步.
◎ 方法区
是堆的一部分, 也就是永久区. 用于存储类结构信息, 其中的常量池、域、方法数据、方法体、构造函数,包括类中的专用方法、实例初始化、接口初始化都存储在这个区域
◎ 运行时常量池:
就是方法区中的常量池,是方法区的一部分. 包含以下几种常量: 编译期的数字常量、方法或者域的引用(在运行时解析). GC根节点.
◎ 本地方法栈
本地方法栈是为JVM运行Native方法准备的空间, 与栈类似, 在JVM利用JIT时会将一些Java方法重新编译为Native Code代码,这些编译后的本地代码通常也是利用这个栈来跟踪方法的执行状态的. 有些类对象被native方法引用, 不能被GC回收.
疑惑:
1. 新建对象时, 对象的成员方法存储在哪里? 方法区吗? guess: 方法体存在方法区, 在进行方法的执行时,会根据具体对象去栈中找对应的方法去栈中调用, 执行完了出栈弹出返回值.
2. 本地方法栈在什么地方? 是内存中独立于栈个堆之外的另一个栈空间吗?
3. 类的Class对象存储在堆的什么地方(是方法区 或者是 非方法区 , 或是拆分之后被存储到方法区中)?
栈: 静态内存分配
堆: 动态内存分配
堆内存的 yong old perman 三个区怎么与前面的几大类对应上?
深入分析java web技术内幕 学习笔记
标签:常量池 空间 char 常量 不能 class 线程 本地 java web
原文地址:http://www.cnblogs.com/duenboa/p/6665553.html