Java
文章平均质量分 74
aspook
公众号「像未来一样」
展开
-
理解Java动态代理
概念理解动态代理类就是在运行时创建的实现了一系列特定接口的类。为了更好行文,还需要先明确三个概念:代理类——在本文中指动态代理类代理接口——在本文中指动态代理类实现的接口代理实例——在本文中指动态代理类的一个实例动态代理的一些特性:代理类是public或final的,不能是abstract代理类均继承自java.lang.reflect.Proxy类代理类在创建时按顺序实现了所指定的接原创 2017-11-15 12:38:57 · 23850 阅读 · 0 评论 -
Javac编译过程笔记
Javac前端编译简述这里不讨论JIT编译、AOT编译,本文提到的编译过程仅仅指把.java文件转变为.class文件的过程,这个过程是我们最常见的,通常由Javac编译器来完成。Javac编译器对代码的运行效率几乎没做什么优化,虚拟机设计者把对代码性能的优化集中到了后端的JIT编译器中。之所以这样设计,因为Class文件拥有虚拟机规范严格定义的通用格式,只要符合Class文件格式,就可以被虚拟机正原创 2017-11-10 14:15:04 · 868 阅读 · 0 评论 -
常用垃圾收集算法——《深入理解Java虚拟机》笔记
概述垃圾收集器(Garbage Collection, GC)的历史要比Java久远,且并非Java独有,GC主要完成以下三件事情:哪些内存需要回收什么时候回收如何回收对于Java内存运行时区域的各个部分,程序计数器、虚拟机栈、本地方法栈3个线程私有区域是随线程而生,又随线程而灭,因此这几个区域的内存分配和回收都具备确定性,不需要考虑垃圾回收的问题。而Java堆和方法区这两个线程共享区的内存原创 2016-08-28 22:17:42 · 1031 阅读 · 0 评论 -
基础回顾——Java对象创建、内存分配、访问定位概述
对象创建于内存分配Java中创建对象并为其分配内存的过程如下:Java语言层面执行new关键字在Java中,通常使用new关键字来创建一个对象(还没有对象的可以试试^_^),对应在虚拟机中会触发一条new指令。虚拟机处理new指令当虚拟机触发一条new指令时,首先根据指令参数去常量池中检查是否有相关类的符号引用,进一步检查它是否已经被加载、解析和初始化,如果没有,则需要先加载类。对类加载相关的信原创 2017-09-15 17:19:59 · 2654 阅读 · 0 评论 -
理解Java对象克隆
简单的对象拷贝在应用开发中,有时候需要得到一个对象的副本,然后对该副本做一些修改而不影响原始对象,可能大家会想到像下面示例中这样做。假设定义一个Person对象,只有name和age两个字段。public class Person { public String name; public int age; public Person(String name, int age)原创 2016-08-25 22:40:07 · 1421 阅读 · 0 评论 -
理解Java泛型
Java是一种强类型的语言,定义一个变量时需要指明其类型。Object是所有类的基类,在Java 1.5之前,为了让类具有通用性,通常使用Object来实现参数的任意化,如将String、Double等存储为Object类型,这个过程叫做自动装箱或向上转型。但是问题在于取数据时,必须做强制类型转换,将Object向下转型为String或Double等类型。向下转型存在很大原创 2016-07-21 09:13:58 · 1260 阅读 · 0 评论 -
Java内存模型与线程
前言本文由PPT整理而来。Page1目录进程与线程Java内存模型Java线程Page2进程一般一个应用程序对应一个进程进程有自己的资源和内存地址空间各个进程之间互不干扰进程会保存程序的运行状态,支持切换及恢复进程使操作系统看起来同一时刻有多个任务在执行Page3线程一个进程可以有多个线程多个线程共享同一进程的资源和内存空间线程创建、调度、切换及线程间通信的开销小于进程U原创 2017-05-12 16:16:02 · 765 阅读 · 0 评论 -
Java内存分配策略——《深入理解Java虚拟机》笔记
概述Java自动内存管理包含两方面的含义:给对象分配内存以及回收分配给对象的内存。Java对象的内存分配主要是指在堆上分配(也有经过JIT编译后被拆散为标量类型并间接地在栈上分配的情况),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,则将按线程优先在TLAB(Thread Local Allocation Buffer)上分配。少数情况下也可能会直接分配在老年代中,分配的规则并非百原创 2016-09-08 10:29:47 · 1648 阅读 · 0 评论 -
Java内存模型——《深入理解Java虚拟机》笔记
Java内存模型概述Java运行在JVM上,通常说的Java内存模型是指在Java虚拟机上的内存分配模型。Java虚拟机在执行Java程序时会把它管理的内存划分为几个不同的数据区域。这些区域有各自的用途以及创建、销毁时间,有的区域随着虚拟机进程的启动而存在,有的区域则随着用户线程的启动而建立,随着用户线程的结束而销毁。根据《Java虚拟机规范(Java SE 7版)》,Java虚拟机中存在的几块内存原创 2016-08-25 09:10:14 · 1074 阅读 · 0 评论 -
Java接口和抽象类的那些事儿
接口与抽象类这两个概念相信大家都已经十分熟悉了,几乎每一个面试的时候,面试官总是问接口与抽象类的区别,这两个概念的确有很多相似之处,下面我们就来理一下Java中的接口和抽象类。由于Java不支持多继承,每个类只能有一个父类,因此Java使用了接口,一个类可以实现多个接口。接口的定义很简单,使用interface关键字,接口中可以定义常量和方法,但是在接口中只能定义方法的声明,而不能实现。类可以原创 2014-08-15 19:01:53 · 1097 阅读 · 0 评论 -
工具类不应该有公有的构造函数
工具类不应该有公有的构造函数工具类是一系列静态成员或方法的集合,意味着它不可以被实例化,即使是抽象的工具类,它可以被继承,但也不可以有公有的构造函数。Java类如果没有声明构造函数,则会默认有一个公有的构造函数,因此需要给工具类至少声明一个非公有的构造函数。不符合要求的代码示例class StringUtils { // Noncompliant public static String conc翻译 2016-05-11 22:26:43 · 13065 阅读 · 1 评论 -
Ubuntu安装JDK及环境变量配置步骤详解
为了配置Groovy开发环境,需要在Ubuntu环境下安装JDK并设置环境变量,具体操作步骤如下:1.下载适用于linux操作系统的JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html个人下载的版本如下,64位的机器请下载对应版本Linu原创 2015-09-15 13:31:55 · 2120 阅读 · 0 评论 -
String、StringBuffer、StringBuilder主要区别及使用选择
1.首先String、StringBuffer、StringBuilder在JDK中都被定义为final类,这意味着他们不可以被继承。2.String最常见,与StringBuffer相比,String的性能较差,因为对String类型进行改变的时候都会重新生成一个新的String对象,这在字符串拼接操作时很明显,因此内容经常改变的字符串不应该使用String,如果不考虑多线程,则应使用Str原创 2015-07-07 16:04:05 · 870 阅读 · 0 评论 -
Java(Android)线程池
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程池一些高级功能。1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void run() { // TODO转载 2015-03-06 10:10:04 · 894 阅读 · 0 评论 -
Java知识点摘要
1.switch(表达式)语句中,表达式的值必须是整型或zifuxing原创 2014-06-04 15:14:58 · 1119 阅读 · 0 评论 -
String之regionMatches方法
Java 字符串有很多有用的方法,如subString()\原创 2014-05-29 10:39:12 · 7233 阅读 · 2 评论 -
Java反射基础指南
概述本文是一篇入门级别的教程,旨在探索Java反射机制,反射允许在运行时操作类、接口、属性以及方法。在编译时如果不知其名称,使用反射则非常方便。另外,还可以通过反射机制实例化类、调用方法、修改和读取属性字段值。导包使用反射不需要额外的库或Jar,JDK在java.lang.reflect包下提供了一系列的类来支持反射,只需要导入这个包即可,如下: import java.la原创 2018-01-25 13:34:55 · 632 阅读 · 0 评论