漠然

Nothing is impossible to a willing heart!

WebLogic request.getContextPath() 为 null 问题

当使用 Weblogic 作为中间件,并且 Web 项目部署方式为 war 包部署时,jsp 页面request.getContextPath() 将返回 null,此时加入以下代码设置 webRoot 即可: String webRoot = request.getSession().getServletContext().getRealPath("/"); if(webRoot == ...

List 的 UnsupportedOperationException 异常

一、前言 今天偶尔测试 List.remove() 和 List.add() 方法很奇怪的出现了 UnsupportedOperationException 异常,但是 “某些情况下” 调用则不会出现这个异常,由于只考虑了局部代码,所以让我很困惑,以下分析一下 “搞笑的 UnsupportedOperationException” 异常。 二、测试代码 首先一个正常的 // 创建一...

JDK8 新特性

一、接口的默认方法实现 在 JDK8 中,接口允许有默认的实现方法,这些默认的实现方法需要使用 default 关键字修饰即可,同时其实现类可直接调用这些方法;代码示例如下: 1、自定义接口 public interface TestInterface { // 接口方法 public void test(); // 接口默认方法1 default ...

JAXB 笔记

一、简介 JAXB(Java Architecture for XML Binding简称JAXB)允许Java开发人员将Java类映射为XML表示方式。JAXB提供两种主要特性:将一个Java对象序列化为XML,以及反向操作,将XML解析成Java对象。换句话说,JAXB允许以XML格式存储和读取数据,而不需要程序的类结构实现特定的读取XML和保存XML的代码! JAXB 原本是 J2...

HotSpot 虚拟机的算法实现

一、概述 HotSpot 虚拟机通过 GC Roots 枚举判定待回收的对象,通过安全点和安全区域确定 GC 的触发点,最后通过各种不同的回收算法完成垃圾回收。 二、GC Roots 枚举过程 GC Roots 枚举最大的困难点在于:检查范围比较大,并且必须在内存快照中进行,保证一致性,而且时间要求比较敏感。 在生产环境中,即使不考虑其它部分内存,仅仅 Java 堆内存就可达几百...

JVM 对象判定和可回收算法

一、可回收对象判定方法 1、引用计数算法 基本原理: 给对象添加一个引用计数器,当有新的地方引用他的时候就将其+1,引用失效则对其-1,知道为0时,说明该对象不被任何引用,可被 GC 回收,如下图所示: 但是这种算法是有缺陷的,比如当 A、B 对象都没有使用时,其应该被 GC 回收,然后根据引用计数器算法,A、B 对象互相持有对方引用,导致两者引用计数器都为1,所以不会被 G...

Java 内存之直接内存

一、概念和特征 直接内存并非 JVMS 定义的标准 Java 运行时内存。 JDK1.4 加入了新的 NIO 机制,目的是防止 Java 堆 和 Native 堆之间往复的数据复制带来的性能损耗,此后 NIO 可以使用 Native 的方式直接在 Native 堆分配内存。 直接内存区域是全局共享的内存区域。 直接内存区域可以进行自动内存管理(GC),但机制并不...

Java 内存之方法区和运行时常量池

一、相关特征 1、方法区特征 同 Java 堆一样,方法区也是全局共享的一块内存区域 方法区的作用是存储 Java 类的结构信息,当我们创建对象实例后,对象的类型信息存储在方法堆之中,实例数据存放在堆中;实例数据指的是在 Java 中创建的各种实例对象以及它们的值,类型信息指的是定义在 Java 代码中的常量、静态变量、以及在类中声明的各种方法、方法字段等等;同事可能包括即时编...

Java 内存自动管理-虚拟机和内存区域概述

本文参考 JVM自动内存管理:内存区域基础概念 一、虚拟机及其定义 1、虚拟机概述 虚拟机: 模拟某种计算机体系结构,执行特定指令的软件;虚拟机一般分为 系统虚拟机、进程虚拟机。 系统虚拟机:如 Virtual Box、VMware 等,完整的模拟整个操作系统。 进程虚拟机:如 JVM、Adobe Flash Player、FC模拟器 等,进程虚拟机不会完整的模拟系统,而只...

Java 内存之 Java 堆

一、基本概念和特性 Java 堆内存是全局共享的 Java 堆通常是 JVM 中最大的一块内存区域 Java 堆得主要作用是用于存放创建的对象实例 JVMS 明确要求,此区域必须实现内存自动管理,即 GC;但不要求具体的 GC 实现,包括实现算法和技术 Java 堆可以在物理上不连续空间分配,只要逻辑上连续即可 Java 堆可能出现 OutOfMemoryErro...