Java常量池

概念

什么是常量

用final修饰的成员变量表示常量,值一旦给定就无法改变!

final修饰的变量有三种:静态变量实例变量局部变量,分别表示三种类型的常量。

Class文件中的常量池

在Class文件结构中,最头的4个字节用于存储魔数Magic Number,用于确定一个文件是否能被JVM接受,再接着4个字节用于存储版本号,前2个字节存储次版本号,后2个存储主版本号,再接着是用于存放常量的常量池,由于常量的数量是不固定的,所以常量池的入口放置一个U2类型的数据(constant_pool_count)存储常量池容量计数值。

阅读更多

Java虚拟机类加载机制

概述

虚拟机把描述类的数据从 Class 文件加载到内存,井对数据进行校验、转换解析初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。

类加载的时机

类从被加载到虚拟机内存中开始,到卸栽出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载七个阶段。其中验证、准备和解析三个部分统称为连接。

加载

加载是类加载过程中的一个阶段,这个阶段虚拟机要完成3件事。

阅读更多

Java自动内存管理机制

Java内存区域与内存溢出异常

概述

对于Java程序员来说,有虚拟机的自动内存管理机制,不再需要像C++那样为每个new操作去写配对的delete/free代码。但正因如此,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是如何使用内存的,那排查错误将会变得异常困难。

运行时数据区域

Java虚拟机在执行Java程序过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。


阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×