这里有3个概念可能需要强调: jvm:java virtual machine,即java虚拟机,可以看成是一个抽象的物理计算机。jvm运行时数据区又分为heap、stack、native method stack、method area、pc五大部分,jvm执行引擎负责执行由classloader ...
分类:
其他好文 时间:
2017-07-28 23:38:44
阅读次数:
178
此处内容均是作者参考《深入理解Java虚拟机》--周志明著 第二章内容所总结 一、java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户线程的启动和结 ...
分类:
编程语言 时间:
2017-07-27 21:18:07
阅读次数:
253
分为以下几个运行时数据区: 程序计数器,java虚拟机栈,本地方法栈,java堆,方法区 程序计数器: 线程私有,记录正在执行的虚拟机字节码指令地址,执行本地方法则为空,是唯一一个java虚拟机内存中没有PutOfMemoryError情况 java虚拟机栈: 线程私有,生命周期也与线程相同,用于支 ...
分类:
编程语言 时间:
2017-07-27 18:20:59
阅读次数:
151
在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用。 1.符号引用(Symbolic References): 符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。例如,在Class文件中它以CONSTA ...
分类:
编程语言 时间:
2017-07-27 15:52:50
阅读次数:
161
(根据《深入理解java虚拟机》这本书总结) 本文主要解释jvm内存模型,以及各个部分的作用。都是自己总结的给自己看的通俗语言,未用专业术语的见谅。 一、为什么要了解jvm内存模型? 在了解一个类的编译-加载-内存分配-初始化所有过程前,要先了解jvm的内存模型。这样对整个java体系可能会更加便于 ...
分类:
其他好文 时间:
2017-07-26 23:39:01
阅读次数:
166
本内容由《深入理解java虚拟机》的部分读书笔记整理而成,本读者计划连载。 通过如下图和文字介绍来了解几个运行时数据区的概念。 方法区:它是各个线程共享的区域,用于内存已被VM加载的类信息、常量、静态变量、即时编译器编译的代码等数据。JVM规范对这个区域的限制很宽松,如同堆一样不需要连续的内存、可选 ...
分类:
编程语言 时间:
2017-07-26 23:33:17
阅读次数:
261
(根据《深入理解java虚拟机》这本书总结) 将new一个对象的时候会经历1加载类信息-2分配堆内存-3分配内存置零值-4实例必要信息设置,这几个过程。 那么这个实例对于分配在堆中的内存,由哪些部分组成呢? 一共三部分: 1、对象头信息:可以分为两部分 (1)存储对象自身的运行时数据,包括hash值 ...
分类:
其他好文 时间:
2017-07-26 23:31:03
阅读次数:
198
说明:本文的内容是看了《深入理解Java虚拟机:JVM高级特性与最佳实践》后为加印象和理解,便记录了重要的内容。 1 开门见山 以前曾经看到过一个java的面试题,当时觉得此题很简单,可是自己把代码运行起来,可是结果并不是自己想象的那样。题目如下: 错误答案 count1=1 count2=1 正确 ...
分类:
编程语言 时间:
2017-07-24 13:05:38
阅读次数:
226
阅读书籍:Java虚拟机精讲(仅个人阅读后总结) 根据受访权限可分为:线程共享内存区和线程私有区 线程共享区: 1、java堆区:储存对象实例; 2、方法区:储存 运行时常量池、字段和数据、构造函数和普通方法的字节码内容以及类、实例、接口初始化需要用到的特殊方法等数据; 3、运行时常量池; 线程私有 ...
分类:
其他好文 时间:
2017-07-23 18:02:37
阅读次数:
111
在类的加载过程中的解析阶段,Java虚拟机会把类的二进制数据中的符号引用 替换为 直接引用,如Worker类中一个方法: 在Worker类的二进制数据中,包含了一个对Car类的run()方法的符号引用,它由run()方法的全名 和 相关描述符组成。在解析阶段,Java虚拟机会把这个符号引用替换为一个 ...
分类:
编程语言 时间:
2017-07-23 10:00:55
阅读次数:
215