Java
文章平均质量分 70
Java领域的一切
暴躁老哥Leo
这个作者很懒,什么都没留下…
展开
-
JVM内存区域详解
运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《Java虚拟机规范(Java SE 8版)》规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域:程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。Java虚拟机栈...原创 2018-10-14 14:43:24 · 116 阅读 · 0 评论 -
什么情况下会出现OutOfMemoryError异常?
在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有可能发生OutOfMemoryError异常的可能。Java堆溢出Java堆用于存储对象实例,只要不断创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。下面为代码示例:/** * @Description: ...原创 2018-10-12 23:14:29 · 4186 阅读 · 0 评论 -
String为什么是不可变的
什么是不可变?String不可变很简单,如下图,给一个已有String第二次赋值,不是在原内存地址上修改数据,而是重新指向一个新对象,新地址。为什么String是不可变的?首先String类是用final关键字修饰,这说明String不可继承。再看下面,String类的主力成员字段value是个char[ ]数组,而且是用final修饰的。final修饰的字段创建以后就不可改变。有的人...翻译 2016-08-09 23:26:13 · 283 阅读 · 0 评论 -
HotSpot 虚拟机对象
对象的创建语言层面上,对象的创建有4种方式:- new 关键字- 反射- 反序列化- 克隆对象的创建过程虚拟机遇到一条new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便...原创 2019-06-10 20:48:13 · 191 阅读 · 0 评论