本章内容 本章介绍,JVM运行过程中是怎样划分区域的,堆,栈,方法区,这些是什么鬼?每个区域存储哪些内容? 区域介绍 程序计数器 虚拟机栈 本地方法栈 堆 方法区 本章已Hotspot为例,虚拟机栈和本地方法栈,是合并的 程序计数器(线程私有) 1 作用 存储程序当前执行指令的地址 2 注意 JVM ...
分类:
编程语言 时间:
2018-07-24 17:43:25
阅读次数:
138
上一节主要介绍了String类的一些构造方法,主要分为四类 无参构造器:String(),创建一个空字符串"",区别于null字符串,""已经初始化,null并未初始化 副本构造器:String(String s),简单的赋值,得到的是一个副本,俩个引用指向的是常量池中的同一个String,但是St ...
分类:
编程语言 时间:
2018-07-23 12:31:54
阅读次数:
200
内存溢出异常 除了程序计数器之外,jvm的其他几个运行时区域都存在着OOM异常的可能性 java堆溢出 对象数量达到最大堆的容量限制后 虚拟机栈和本地方法栈溢出 线程请求的栈深度大于虚拟机所允许的最大深度 虚拟机在扩展栈时无法申请到足够的内存空间 方法区和运行时常量池溢出 生成大量的class的情况JDK的可视化工具 JConsole:java监视与管理控制台 概述;类;vm摘要;MBe
分类:
其他好文 时间:
2018-07-22 12:03:41
阅读次数:
206
Class类文件结构 class文件是一组以8字节为单位的二进制流,只有两种数据类型:无符号数(基本数据类型),表(复合数据类型) 魔数 版本号 常量池(占class空间最大的数据之一,从1开始计数) 1.字面量 :接近于java层面的常量概念,如字符串,声明为final的常量 2.符号引用:类和接口的全限定名,字段和方法的描述符 字段描述符:描述字段数据类型 方法描述符:
分类:
其他好文 时间:
2018-07-22 12:03:32
阅读次数:
193
方法区 线程共享。 当JVM使用类装载器装载某个类时,首先获取class文件,提取该文件的内容信息,将这些信息存储到方法区,最后返回一个class实例。方法区用于存储已经被虚拟机加载的类信息(class)(版本,字段,方法,接口等描述信息),常量,静态变量(static),即时编译期编译后的代码数据等。称为“永久代”。GC在这区域较少出现,内存回收的主要目标是针对常量池的回收和对类的卸载(某个类不
分类:
其他好文 时间:
2018-07-21 17:18:26
阅读次数:
186
#id(变量),返回变量的内存地址# is 和 == 的区别#is判断的是内存地址, == 判断内容.# 小数据池(常量池):把我们使用过的值存放在小数据池中,供其他变量是用.#小数据池中放的是数字和字符串类型的数据,其他数据类型不存放.#对于数字: -5~256会被添加到小数据池中,每次使用都是同 ...
分类:
编程语言 时间:
2018-07-18 17:11:32
阅读次数:
158
JAVA变量(包括常量)可以存放在 栈、堆、方法区三块内存区域,除去方法区的常量池中存放的常量之外主要的变量都存放在栈和堆中。 其中栈中的变量会受线程的影响(线程私有),当线程结束时变量销毁 堆中的变量则是线程共享的,由 gc 处理。 变量的存储位置跟变量的类型和变量的作用域有关,如下: ...
分类:
编程语言 时间:
2018-07-17 19:29:07
阅读次数:
183
以Hotspot虚拟机为例,描述对象的 创建过程。 对象的创建 通过new关键字创建对象 1. 虚拟机在遇到new关键字后先去常量池中寻找一个类的符号引用, 2. 检查这个类是否被加载,解析和初始化,如果没有则执行类加载过程 3. 为对象分配内存 在类加载过程完成后类就已经确定了对象所需要的大小,然 ...
分类:
编程语言 时间:
2018-07-14 20:05:15
阅读次数:
177
当 JVM 收到一个 new 指令时,会检查指令中的参数在常量池是否有这个符号的引用,还会检查该类是否已经被加载过了,如果没有的话则要进行一次类加载。 ...
分类:
其他好文 时间:
2018-07-13 10:21:47
阅读次数:
139
Java虚拟机内存管理: 共享: 方法区:存储运行时常量池、已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 java堆:存储对象实例 线程独占区: 虚拟机栈:存放方法运行时所需的数据、成为栈帧 本地方法栈:为jvm所调用到的Nativate即本地方法服务 程序计数器:记录当前线 ...
分类:
其他好文 时间:
2018-07-12 10:27:48
阅读次数:
158