![](https://img-blog.csdnimg.cn/20190910150411591.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java知识
鹭岛猥琐男
耐得住寂寞,才能守得住繁华
展开
-
Java线程池
1.概述 在Android开发中,不能在主线程进行耗时操作,运行耗时操作必须创建子线程来运行。在一些频繁的耗时操作做(如ListView中图片下载),如果每次进行耗时操作都创建一个子线程。这样的话如果进行管理所创建的子线程,它们之间相互竞争,很可能由于占用过多资源导致OOM或者死机。而且每次创建线程、销毁线程都会有资源的消耗,而线程池可以很好解决这类的问题。 线程池的优点: 1.减少资源的开...原创 2019-07-14 15:13:13 · 119 阅读 · 0 评论 -
HashMap 的使用及源码解析
1. 概述 在Android开发中,HashMap也是常用的集合类,一直以来只是知道怎么用,以及HashMap是线程不安全的,但是对于内部是如何实现却没有去关注过。此篇将对HashMap的源码进行解析,进一步了解HashMap的实现原理。在JDK1.8之前的版本HashMap的实现和JDK1.8的HashMap实现方式存在较大差异,这里只解析JDK1.8中HashMap的源码。 2. Hash...原创 2019-09-19 22:39:41 · 239 阅读 · 0 评论 -
System.arrayCopy()与Arrays.copyOf()的区别
作为一个Android开发者,对这两个方法挺陌生的,只有在分析阅读ArrayList的源码才算是真正接触到这两个方法。在此记录下这两个方法的用法及其源码。 System.arrayCopy: 将指定源数组中的数组从指定位置复制到目标数组的指定位置。 实例: package zzw.cn.listtest; /** * @author 鹭岛猥琐男 * @create 2019/8/7...原创 2019-08-07 11:35:40 · 414 阅读 · 0 评论 -
ArrayList的使用及源码解析
1. 简介 不管是做Android开发还是做Java开发,都会经常使用到ArrayList 。ArrayList底层基于数组实现容量大小动态变化。下面将介绍ArrayList的使用以及分析ArrayList的源码,从而对ArrayList有一个深入的理解。 2. ArrayList的使用 先看以下实例: package zzw.cn.listtest; import java.util...原创 2019-08-06 06:52:10 · 517 阅读 · 0 评论 -
Java内存区域
目前正在读《深入理解Java虚拟机》这本书,此篇是根据这本书的内容进行整理。 Java虚拟机在执行Java程序的过程会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。Java虚拟机所管理的内存将会包括以下几个运行时数据区域:(此图片来源于百度图片) 1.程序计数...原创 2019-07-18 06:05:07 · 115 阅读 · 0 评论 -
Java类加载机制
目前正在读《深入理解Java虚拟机》这本书,此篇是根据这本书的内容进行整理。 1. 类加载机制定义 虚拟机把描述类的的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会另类加载时稍微增加一点开销,但是会为Jav...原创 2019-07-20 15:43:53 · 120 阅读 · 0 评论 -
Java虚拟机垃圾回收
目前正在读《深入理解Java虚拟机》这本书,此篇是根据这本书的内容进行整理。 Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈 3个区域随着线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而执行者出栈和入栈的操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配回收都具备确定性,在这几个区域内就不需要过多考虑回收的问题,因为方法结...原创 2019-07-20 06:02:14 · 109 阅读 · 0 评论 -
Java对象相关知识
目前正在读《深入理解Java虚拟机》这本书,此篇是根据这本书的内容进行整理。 1.对象的创建 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用。 检查这个符号引用代表的类是否已被加载、解析和初始化过;如果没有,那必须先执行相应的类加载过程; 在类加载检查通过后,虚拟机将为新生对象分配内存。 对象所需内存大小在类加载完成后便可完全确定,为对...原创 2019-07-19 05:51:43 · 118 阅读 · 0 评论 -
Java创建线程的三种方式
1. 继承Thread 1.1创建类并且继承Thread类,重写 run() 方法。 package cn.zzw; public class FirstThread extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) { ...原创 2019-07-15 21:54:05 · 137 阅读 · 0 评论 -
Java的四种引用方式
Java的四种引用的区别: 强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM 也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象 软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收...原创 2019-06-30 09:02:32 · 225 阅读 · 0 评论 -
LinkedHashMap 源码解析
1. 概述 大部分的 Android 开发人员对LinkedHashMap 的认识,应该都是从 Lrucache 里面的来的吧。Lrucache 只所以实现开始访问排序,底层原理就是靠的LinkedHashMap。LinkedHashMap 的例子如下: package zzw.cn.testlinkedhashmap; import java.util.Iterator; impor...原创 2019-10-07 21:30:17 · 228 阅读 · 0 评论