这里以HotSpot为例,且所说的对象指普通的Java对象,不包括数组和Class对象等。 对象创建的过程 对象的内存布局 对象的访问定位 ...
分类:
编程语言 时间:
2017-07-10 13:27:26
阅读次数:
219
在java中,有两种创建String类型变量的方式: 第一种方式创建String变量时,首先查找JVM方法区的字符串常量池是否存在存放"abc"的地址,如果存在,则将该变量指向这个地址,不存在,则在方法区创建一个存放字面值"abc"的地址。 第二种方式创建String变量时,在堆中创建一个存放"ab ...
分类:
其他好文 时间:
2017-07-09 23:54:06
阅读次数:
247
PC寄存器 -每个线程拥有一个PC寄存器 -在线程创建时 创建 -指向下一条指令的地址 -执行本地方法时,PC的值为undefined 方法区 -保存装载的类信息 类型的常量池 字段,方法信息 方法字节码 -通常和永久区(Perm)关联在一起 常量池:在jdk1.6之前,这块区间属于永久区,但是在j ...
分类:
其他好文 时间:
2017-07-09 17:13:42
阅读次数:
95
内存中对象的创建、对象的结构以及訪问方式。 一、对象的创建 在语言层面上。对象的创建仅仅只是是一个newkeyword而已,那么在虚拟机中又是一个如何的过程呢? (一)推断类是否载入。虚拟机遇到一条new指令的时候,首先会检查这个指令的參数能否在常量池中定位到一个类的符号引用,而且检查这个符号代表的 ...
分类:
编程语言 时间:
2017-07-09 13:57:40
阅读次数:
217
内存自动管理20 内存模型20 Jvm垃圾收集算法22 标记-清除22 标记-整理22 复制算法22 分代思想23 Stop-The-World23 java堆溢出:24 方法区和运行时常量池溢出27 本机直接内存溢出29 垃圾收集器30 引用计数器:... ...
分类:
其他好文 时间:
2017-07-08 21:12:55
阅读次数:
286
在Eclipse 配置运行参数或者在命令行中加上参数 eclipse 安装 MAT插件,使用。 虚拟机栈内存溢出: 创建很多线程导致内存溢出,可以减少最大堆和减少栈容量。 方法区和运行时常量池溢出 在jdk1.6中intern()方法会把首次遇到的字符串实例复制到永久代。而由StringBuilde... ...
分类:
编程语言 时间:
2017-07-08 21:12:24
阅读次数:
328
一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查、对象分配内存、并发处理、内存空间初始化、对象设置、执行ini方法等。 主要流程如下: 1. 类加载检查 JVM遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号... ...
分类:
其他好文 时间:
2017-07-08 21:07:07
阅读次数:
185
String应用简介 前言 String字符串在Java应用中使用非常频繁,只有理解了它在虚拟机中的实现机制,才能写出健壮的应用,本文使用的JDK版本为1.8.0_111。 常量池 Java代码被编译成class文件时,会生成一个常量池(Constant pool)的数据结构,用以保存字面常量和符号... ...
分类:
编程语言 时间:
2017-07-08 14:13:09
阅读次数:
348
简单的说: String:创建的是字符串常量,创建的字符串会放入内存的常量池中,是不可变的对象。如果要对String类型的内容进行改变,实际上每次改变都会重新new一个String类型的字符串对象,指针指向的地址已经发生改变。如果要经常改变字符串的内容时,不建议使用String类型的字符串,因为每次 ...
分类:
其他好文 时间:
2017-07-05 17:15:27
阅读次数:
152
JVM的基本结构及其各部分详解(一)(转载) 1 java虚拟机的基本结构如图: 1)类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中 ...
分类:
其他好文 时间:
2017-07-03 19:59:06
阅读次数:
245