置顶文章

# 程序计数器、 虚拟机栈、 本地方法栈 3 个区域随线程而生,随线程而灭;因此在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。 # 垃圾收集器所关注的是堆内存 # 确定对象状态 # 引用计数算法 通过给对象添加引用计数器,记录对象被引用的状态,当引用数量为 0 时,该对象就处于不可再被使用状态。 COM(Component Object Model)技术、 ActionScript 3 的 FlashPlayer、Python 语言等都使用了引用计数算法进行内存管理。 Java...

精选分类

文章列表

# 概述 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、 转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型。 类型的加载、 连接和初始化过程都是在程序运行期间完成的。 # 类加载的时机 类的生命周期 加载、 验证、 准备、 初始化和卸载这 5 个阶段的顺序是固定的,类的加载过程必须按照这种顺序按部就班地开始。(这些阶段通常都是互相交叉地混合式进行的,通常会在一个阶段执行的过程中调用、 激活另外一个阶段。) 为了支持 Java...

Java 虚拟机的指令由一个字节长度的、 代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。如果要将一个 16 位长度的无符号整数使用两个无符号字节存储起来(将它们命名为 byte1 和 byte2),那它们的值应该是这样的:(byte1<<8)|byte2 不考虑异常处理情况下,虚拟机解释器执行模型伪代码: do{ 自动计算 PC 寄存器的值加 1; 根据 PC...

# Class 文件格式(定义) 任何一个 Class 文件都对应着唯一一个类或接口的定义信息(但并不一定以磁盘文件的形式存在。譬如通过类加载器直接生成类或接口)。 Class 文件是一组以 8 位字节为基础单位的二进制流其中各个数据项目严格按照顺序紧凑地排列(没有任何分隔符)。 当遇到需要占用 8 位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个 8 位字节进行存储。 使用伪结构存储数据:无符号数(以 u1、 u2、 u4、 u8 来分别代表 1 个字节、 2 个字节、 4 个字节和 8...

# 功能要求 每天定时 8 点访问所需前端页面(以百度为例),待页面加载完成后对当前页面截图(指定大小)。 # 安装 phantomJs(有多种方式,本文通过直接下载工具包 ftp 上传到目标路径安装) 下载 phantomjs 工具包(本文使用 linux 版) 官方下载地址:https://phantomjs.org/download.html # 将工具包上传并解压(本文解压到 /usr/local 路径下) 使用命令解压工具包 [root@VM_0_14_centos local]# tar -xbvf...

# 运行时数据区域 # 程序计数器(线程私有) 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器(虚拟机字节码指令的地址)。 唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。 # Java 虚拟机栈(线程私有) 每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、 操作数栈、 动态链接、 方法出口等信息。 局部变量表存放了编译期可知的各种基本数据类型(boolean、 byte、 char、 short、 int、float、...

# Java 技术体系包括 以下几个组成部分:(1,2,3 统称为 JDK) Java 程序设计语言 各种硬件平台上的 Java 虚拟机 Java API 类库 Class 文件格式 来自商业机构和开源社区的第三方 Java 类库 # Java 技术体系可以分为 4 个平台 Java Card:支持一些 Java 小程序(Applets)运行在小内存设备(如智能卡)上的平台。 Java ME(Micro Edition):支持 Java 程序运行在移动终端(手机、 PDA)上的平台,对 Java API 有所精简,并加入了针对移动终端的支持,这个版本以前称为 J2ME。 Java...

在使用 Navicat15 连接 sqlserver 数据库时遇到报错(未发现数据源名称并且未指定默认驱动): 解决方法:手动安装 navicat 提供的 sqlserver 数据源驱动(msodbcsql_64.msi(部分 navicat 版本该驱动名称为 sqlncli_x64.msi)),在 navicat 安装目录下 安装后测试连接成功: 参考: https://www.cnblogs.com/maycpou/p/11395057.html

发现每次代码编译有部分文件都会发生变动,因此想要在 git 上传代码时忽略掉这些文件。尝试修改.gitignore 文件未生效。 原因: .gitignore 只能忽略那些原来没有被 track 的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore 是无效的。 正确做法: 在每个 clone 下来的仓库中手动设置不要检查特定文件的更改情况。 忽略指定文件 git update-index --assume-unchanged FILE在 FILE 处输入要忽略的文件。 还原操作 git update-index --no-assume-unchanged...

以下为课堂整理笔记 课程:Netty 核心技术及源码剖析 - 韩顺平 # Java NIO 基本介绍 Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入 / 输出的新特性,被统称为 NIO (即 New IO),是同步非阻塞的 NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。 NIO 有三大核心部分:Channel (通道),Buffer (缓冲区), Selector (选择器) NIO 是...

以下为课堂整理笔记 课程:Netty 核心技术及源码剖析 - 韩顺平 # I/O 模型 # I/O 模型基本说明 I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能 Java 共支持 3 种网络编程模型 / IO 模式:BIO、NIO、AIO Java BIO : 同步并阻塞 (传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 Java NIO : 同步非阻塞,服务器实现模式为一个线程处理多个请求...