对象的创建 虚拟机遇到一条new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定 ...
分类:
编程语言 时间:
2018-11-05 10:10:56
阅读次数:
163
《HotSpot实战》深入浅出地讲解了HotSpot虚拟机的工作原理,将隐藏在它内部的本质内容逐一呈现在读者面前,包括OpenJDK与HotSpot项目、编译和调试HotSpot的方法、HotSpot内核结构、Launcher、OOP-Klass对象表示系统、链接、运行时数据区、方法区、常量池和常量 ...
分类:
其他好文 时间:
2018-11-04 11:09:07
阅读次数:
203
一、Java 虚拟机内存原型 寄存器:我们在程序中无法控制。 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中。 堆:存放用new产生的数据。 静态域:存放在对象中用static定义的静态成员。 常量池:存放常量。 非 RAM 存储:硬盘等永久存储空间。 二、常量池(con ...
分类:
编程语言 时间:
2018-11-03 15:20:53
阅读次数:
170
JVM总括四-类加载过程、双亲委派模型、对象实例化 一、 类加载过程 一定要注意每个过程执行的内容!!!!!! 1、Load: 将编译后的.class文件以二进制流的方式加载到JVM内存中,并转化为特定的数据结构,用到的就是classLoad二类加载器。这个过程中校验cafe babe魔法数、常量池 ...
分类:
其他好文 时间:
2018-11-02 20:20:33
阅读次数:
330
使用synchronized的时候,一般要防止String 常量池造成的坑。 比如,一个函数中包含: synchronized("A") { } 还有另外一个函数中包含: synchronized("A") { } 因为常量池的原因 :比如下面,A和B实际上是同一个对象。 String a = "A ...
分类:
其他好文 时间:
2018-11-01 01:08:19
阅读次数:
208
java源码和class文件 源码: 使用editplus 经过hex viewer解压方式打开的Class文件: Class文件组成: 1、00000000~00000003 (u4 0xCA FE BA BE)魔数 Magic Number 2、00000004~00000005(u2 0x 0 ...
分类:
其他好文 时间:
2018-10-28 11:07:10
阅读次数:
189
一、不可变 一个 String 类型的值是不可以改变的,比如,String china = "中国",“中国”这个字符串从它创建开始直到销毁都是不可改变的。 二、字符串常量池 字面量声明的字符串内存都分配在字符串常量池。 三、new 的字符串都是一个新的字符串 引用 a 和引用 b 指向不同的堆内存 ...
分类:
其他好文 时间:
2018-10-27 19:46:56
阅读次数:
161
堆(线程共享):虚拟机启动时创建,用于存放对象实例,几乎所有的对象(包含常量池)都在堆上分配内存, 当对象无法再该空间申请到内存时将抛出OutOfMemoryError异常。同时也是垃圾收集器管理的主要区域。 可通过 -Xmx –Xms 参数来分别指定最大堆和最小堆 ...
分类:
编程语言 时间:
2018-10-25 18:00:50
阅读次数:
209
今天是1024...收入是450R 今日主要内容 1. 小数据池, 常量池,id() 查看变量的内存地址is和== is 判断内存地址是否一致 == 判断内容是否一致小数据池的作用: 为了快速的创建字符串对象, 可以减少内存的浪费 用缓存的前提:数据可以被共享。不可变. 2. 再谈编码ascii: ... ...
分类:
其他好文 时间:
2018-10-24 19:54:46
阅读次数:
196
小数据池/常量池(坑,别纠结) : 小数据池 一种数据缓存机制.也被称为驻留机制 用缓存的前提: 数据可以被共享。不可变数据类型 作用/意义:把数据存在小数据池 快速创建对象 共享 节省内存 解释字符串赋值问题等 python中只针对:整数,字符串串,布尔值 注意共享的是不可改变的数据类型 id() ...
分类:
其他好文 时间:
2018-10-24 19:50:36
阅读次数:
138