阅读书籍:Java虚拟机精讲(仅个人阅读后总结) 根据受访权限可分为:线程共享内存区和线程私有区 线程共享区: 1、java堆区:储存对象实例; 2、方法区:储存 运行时常量池、字段和数据、构造函数和普通方法的字节码内容以及类、实例、接口初始化需要用到的特殊方法等数据; 3、运行时常量池; 线程私有 ...
分类:
其他好文 时间:
2017-07-23 18:02:37
阅读次数:
111
栈:自动分配连续的空间,后进先出。用于存放局部变量 Example:s1(局部变量。new出来以后放到堆里保存) s1中存放一个地址,指向堆中保存的对象,对象中的各种属性也各自存放一个地址,指向堆内方法区中所保存的代码、static变量以及常量池等。图例如下 堆:空间不连续。用于放置new出的对象 ...
分类:
其他好文 时间:
2017-07-23 10:10:24
阅读次数:
142
图解 Java 内存区域及内存溢出异常 在阅读 《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版) 》后,为了加深对 Java 内存区域的印象及理解,特意做成了思维导图。 名词解释 线程共享数据区域 直接内存 并不是虚拟机运行时数据区的一部分,也不是 Java 虚拟机规范中定义的内存区。N ...
分类:
编程语言 时间:
2017-07-22 18:11:10
阅读次数:
164
Java中String new和直接赋值的区别 对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。 例如: String s ...
分类:
编程语言 时间:
2017-07-21 19:46:05
阅读次数:
184
输出结果为: zhangsanlisi 分析:因为String是个特殊的final类,所以每次对String的更改都会重新创建内存地址并存储(也可能是在字符串常量池中创建内存地址并存入对应的字符串内容),但是因为这里String是作为参数传递的,在方法体内会产生新的字符串而不会对方法体外的字符串产生 ...
分类:
其他好文 时间:
2017-07-19 00:15:46
阅读次数:
140
对象的创建 java是一门面向对象的语言。在Java程序执行过程中无时无刻有Java对象被创建出来。在语言层面上,创建对象(克隆、反序列化)一般是一个newkeyword而已,而在虚拟机中,对象的创建步骤例如以下: 1、当虚拟机遇到new指令时。首先将去检查这个指令參数能否在常量池中定位到一个类的引 ...
分类:
其他好文 时间:
2017-07-15 22:51:07
阅读次数:
228
转载自:https://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/ 在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不 ...
分类:
编程语言 时间:
2017-07-15 11:27:55
阅读次数:
263
在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表。 在过去(当自定义类加载器使用不普遍的时候),类几乎是“静态的”并且很少被卸载和回收,因此类也可以被看成“永久的”。另外由于类作为JV ...
分类:
其他好文 时间:
2017-07-14 13:35:41
阅读次数:
1682
摘录自http://www.cnblogs.com/SaraMoring/p/5687466.html Java内存分配主要包括以下几个区域: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 3. 堆:存放用new产生的数据 4. ...
分类:
编程语言 时间:
2017-07-14 00:36:17
阅读次数:
249
一般Java在内存分配时会涉及到以下区域:◆寄存器:我们在程序中无法控制◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new出来的对象)◆堆:存放用new产生的数据◆静态域:存放在对象中用static定义的静态成员◆常量池:存放常量◆非RAM存..
分类:
编程语言 时间:
2017-07-10 16:50:49
阅读次数:
149