方式一:String a = “aaa” ; 方式二:String b = new String(“aaa”); 两种方式都能创建字符串对象,但方式一要比方式二更优。因为字符串是保存在常量池中的,而通过new创建的对象会存放在堆内存中。一:常量池中已经有字符串常量”aaa” 通过方式一创建对象,程序 ...
分类:
编程语言 时间:
2017-06-13 16:59:46
阅读次数:
149
一、对象的创建: 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载,解析和初始化过。如果没有,那必须先执行响应的类加载过程。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内 ...
分类:
其他好文 时间:
2017-06-12 20:35:45
阅读次数:
245
初步介绍Java虚拟机运行时数据区——程序计数器、虚拟机栈、本地方法栈、运行时常量池、直接内存 ...
分类:
编程语言 时间:
2017-06-11 22:16:16
阅读次数:
199
类的生命周期:加载、连接(验证、准备、解析)、初始化、使用、卸载主动引用(有且只有)初始化: 1.new、getstatic、putstatic、invokestatic如果类没初始化,则初始化new关键字实例化对象、读取或设置一个类的静态字段(被final修饰、*已在编译期把结果放入常量池的静态字 ...
分类:
编程语言 时间:
2017-06-06 23:31:18
阅读次数:
255
Java虚拟机运行时数据区 对象的创建 Java创建对象,在语言层面上使用new关键字。虚拟机遇到new关键字时,会检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,那就必须先执行类加载过程。类加载通过之后,虚拟机将会为新 ...
分类:
编程语言 时间:
2017-06-05 00:40:31
阅读次数:
548
一、Java虚拟机内存区域如何划分 1、Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 线程私有 1、内存空间较小2、随用户进程的启动和结束而建立和销毁。 无 每个线程都有独立的程序计数器。执行Nati... ...
分类:
编程语言 时间:
2017-06-02 00:58:34
阅读次数:
210
PC寄存器 每个线程拥有一个PC寄存器 在线程创建时 创建 指向下一条指令的地址 执行本地方法时,PC的值为undefined 方法区 保存装载的类信息 类型的常量池 字段,方法信息 方法字节码Java堆 和程序开发密切相关 应用系统对象都保存在Java堆中 所有线程共享Java堆 对分代GC来说, ...
分类:
其他好文 时间:
2017-05-30 15:59:26
阅读次数:
140
http://www.blogjava.net/DLevin/archive/2011/09/13/358497.html http://blog.csdn.net/sum_rain/article/details/39892219 http://www.blogjava.net/DLevin/ar ...
分类:
编程语言 时间:
2017-05-27 10:46:45
阅读次数:
320
1、类加载子系统:负责从文件系统或者网络中加载Class信息,加载的信息存放在一块称之为方法区的内存空间。 2、方法区:就是存放类信息、常量信息、常量池信息、包括字符串字面量和数字常量等。方法区是辅助堆栈的块永久区,解决堆栈信息的产生,是先决条件。 3、Java堆:再java虚拟机启动的时候建立Ja ...
分类:
编程语言 时间:
2017-05-27 00:48:16
阅读次数:
235
JVM中常见的OOM,那么如何通过自己编写代码产生这些OOM异常呢?通过写代码重现异常,是为了避免在工作中写出有OOM BUG的代码。之前虽然看过相关文章,但是没自己写过这些代码,这次在编写的实际过程中,由于和书本使用的JDK版本不一致,也会有点问题。其中印象最深刻的就是从JDK1.7开始常量池就已 ...
分类:
其他好文 时间:
2017-05-25 01:26:34
阅读次数:
283