如果要向运行时常量池中添加内容,最简单的做法就是使用String.intern()这个Native方法。该方法的作用是:如果池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象;否则将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。..
分类:
其他好文 时间:
2014-07-28 16:44:34
阅读次数:
234
方法区用于存放Class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。对于这个区域的测试,基本的思路是运行时产生大量的类去填满方法区,虽然直接使用JavaSEAPI也可以动态产生类(如反射时的GeneratedConstructorAccessor和动态代理等),在本代码中借助CGLib直..
分类:
其他好文 时间:
2014-07-28 16:44:04
阅读次数:
281
DirectMemory容量可通过-XX:MaxDirectMemorySize指定,如果不指定,则默认与Java堆的最大值(-Xmx指定)一样。代码中越过了DirectByteBuffer类,直接通过反射获取Unsafe实例并进行内存分配(Unsafe类的getUnsafe()方法限制了只有引导类加载器才会返回实例,也就是设计者希望只有r..
分类:
其他好文 时间:
2014-07-28 16:43:04
阅读次数:
281
/*需求:模拟java.util.Collection一些简单的用法!注意:java虚拟机中并没有泛型类型的对象。泛型是通过编译器执行一个被称为类型擦除的前段转换来实现的。1)用泛型的原生类型替代泛型。原生类型是泛型中去掉尖括号及其中的类型参数的类或接口。泛型中所有对类型变量的引用都替换为类型变量的...
分类:
编程语言 时间:
2014-07-28 14:55:53
阅读次数:
315
一、基础知识:1、JVM、JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性。 java语言是跨平台,jvm不是跨平台的。 JRE(Java Runtime Environment):java的运行环境,包括jvm+java的....
分类:
编程语言 时间:
2014-07-28 11:28:00
阅读次数:
244
V8虚拟机的内存回收机制,和Java虚拟机类似采用分代回收机制,分为新生代和老生代,当满足一定条件新生代对象会晋级到老生代。利用Node在服务端编程要小心内存泄露问题,一个小的泄露由于大量并发访问可能会导致应用程序的崩溃。...
分类:
Web程序 时间:
2014-07-27 23:56:19
阅读次数:
411
Java语言是一种编译后再经过解释器执行的过程, 解释器主要就是如何处理解释Class文件的二进制字节流。JVM主要包含三大核心部分:运行时数据区,类加载器和执行引擎。 虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验、准备、解析和初始化,最终就会形成可以被虚拟机使用的J...
分类:
编程语言 时间:
2014-07-26 14:11:05
阅读次数:
279
由于在HotSpot虚拟机中并不区分虚拟机栈和本地方法栈,因此对于HotSpot来说,-Xoss参数(设置本地方法栈大小)虽然存在,但实际上是无效的,栈容量只由-Xss参数设定。关于虚拟机栈和本地方法栈,在Java规范中描述了两种异常:如果线程请求的栈深度大于虚拟机所允许的最大深度,将..
分类:
其他好文 时间:
2014-07-26 03:28:27
阅读次数:
179
Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of PermGen (Non-heap memory) space remains. It is strongly recommendedthat you exi...
分类:
编程语言 时间:
2014-07-26 00:18:46
阅读次数:
241
内存中对象的创建、对象的结构以及访问方式。
一、对象的创建
在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢?
(一)判断类是否加载。虚拟机遇到一条new指令的时候,首先会检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号代表的类是否被加载、解析并初始化。如果没有完成这个过程,则必须执行相应类的加载。
(二)在堆上为对象分配空...
分类:
编程语言 时间:
2014-07-25 11:22:21
阅读次数:
261