摘要:
StringTable String的基本特性 String:字符串,使用一对""引起来表示 String声明为final的,不可被继承。 String实现了Serializable接口:表示字符串是支持序列化的。实现了Compareable接口:表示String可以比较大小。 String在jdk 阅读全文
摘要:
执行引擎 概述 执行引擎是Java虚拟机核心组成部分之一。 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系 阅读全文
摘要:
对象的实例化内存布局与访问定位 对象的实例化 创建对象的方式 new 最常见的方式 变形1:XXX的静态方法 变形2:XXX的Builder/XXXFactory的静态方法 Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是public Constructor的ne 阅读全文
摘要:
方法区 栈、堆、方法区的关系 运行时数据区结构图 从线程共享与否角度来看 栈、堆、方法区的交互关系 这两幅图中: reference就是person Person就是对象类型数据 new Person就是对象实例数据 方法区的理解 《Java虚拟机规范》中明确说明:”尽管所有的方法区在逻辑上是属于堆 阅读全文
摘要:
堆 堆的核心概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。 堆内存的大小是可以调节的。 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续 阅读全文
摘要:
本地方法 什么是本地方法? 简单地讲,一个Native Method就是一个Java调用非Java代码的接口,一个Native Method是这样一个Java方法;该方法的实现由非Java语言实现,比如C。这个特征并非Java所持有,很多其他的编程语言都有这一机制,比如在C中你可以用extern “ 阅读全文
摘要:
操作数栈 每一个独立的栈桢中除了包含局部变量表以外,还包含一个后进先出的操作数栈,也可以称之为表达式栈。 操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈/出栈 某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈。使用他们后再把结果压入栈。 比如:执行复制、交 阅读全文
摘要:
虚拟机栈 内存中的栈和堆 栈是运行时的单位,堆是存储的单位。 即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。 虚拟机栈的基本内容 Java虚拟机栈是什么? Java虚拟机,早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内 阅读全文
摘要:
PC Register程序计数器 JVM中的程序计数器,Register的命名源于CPU的寄存器,寄存器存储指令相关的线程信息。CPU只有把数据装载到寄存器中才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器会更加贴切(也称程序钩子),并且不容易引起不必要的误会。JVM中的P 阅读全文
摘要:
运行时数据区 Java虚拟机定义了若干种程序运行时期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应,这些与线程对应的数据区域会随着线程的开始和结束而创建和销毁。 灰色的为单独线程私有的,红色的为多个线程共享的。即 每个线程:独立包括程序计 阅读全文