
Java
文章平均质量分 67
双木青橙
这个作者很懒,什么都没留下…
展开
-
Java内存学习笔记05-内存分配与回收策略
内存分配与回收策略对象优先在Eden分配前面已经提到过,在新生代,Eden和Survivor区域的容量比值,比值为8,在大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC。Minor GC和Full GC的区别新代代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象 大多都具有 朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。老年代GC (Majar GC、Full GC)指发生在老年代的原创 2022-02-27 18:30:56 · 563 阅读 · 0 评论 -
Java内存学习笔记04-垃圾收集算法与垃圾收集器
1.垃圾收集算法1.1 标记-清除算法最基础的收集算法是“标记-清除”(Mark-sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象,后续的收集算法都是基于这种思路并对其缺点进行改进而得到的。它的主要缺点有两个:一个是效率问题,标记和清除过程的效率都不高;另一个是空间问题,标记清除之后会产生大量的不连续的内存碎片,空间碎片可能会导致,当程序在以后的运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一原创 2022-01-12 22:32:07 · 273 阅读 · 0 评论 -
Java内存学习笔记03-判断对象是否存活
1.前言Javam内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈本个区域随着线程而生,随线程而灭; 栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由JIT编译期进行一些优化,但在本章基于概念模型的讨论中,大体可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟着回收了,而Java堆和方法区则不一样,一个原创 2022-01-03 12:26:04 · 445 阅读 · 0 评论 -
Java内存学习笔记02-对象访问
对象访问在Java语言中,即使是最简单的访问,也会涉及Java栈,Java堆、方法区这三个最重要的内存区域之间的关联关系,如下面这句代码:Object obj = new Object();假设这句代码出现在方法体中,那Object obj这部分的语义将会反映到Java栈的本地变量表中,作为一个reference类型数据出现。而new Object()这部分的语义将会反映到Java堆中,形成一块存储了Object类型所有实例数据值(Instance Data,对象中各个实例字段的数据)的结构化内存。原创 2022-01-03 11:38:22 · 156 阅读 · 0 评论 -
Java内存学习笔记01-运行时数据区域划分
运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分成若干个不同的数据区域,如下所示:1. 程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。程序计原创 2022-01-03 10:58:12 · 568 阅读 · 0 评论 -
Java Exception相关问题总结
疑问及解答在方法中throw 异常,一定在方法上声明吗?什么场景下不需要声明这个问题出现的问题是,我实现的一个方法是耗时操作,所以限制在UI主线程中操作,避免出现ANR,所以在方法中,如果判断当前是主线程,则直接抛出IllegalThreadStateException,但是review 代码的时候,Commiter 要求我在方法声明的后面加上throws IllegalThreadStateException的声明,所以我重新分析和验证了下其中的必要性,结果是:不必要 if (Lo原创 2021-06-15 00:11:24 · 1250 阅读 · 4 评论 -
【转载】【Java8 系列之重新认识HashMap】
Java 8系列之重新认识HashMap转载 2021-01-09 16:23:39 · 144 阅读 · 0 评论 -
【RandomAccessFile类多线程场景踩坑】
背景本来是想开发一个满足多线程场景需求的对指定内容写入log文件的工具类,同时拥有缓存机制,只有待写入内容超过缓存空间大小时才会进行写入。但是在多线程测试时却发现,在多线程场景下,会存在文件内容与写入内容混乱的问题如下:85列nnnn后面会写入tttt。核心实现方法//将指定内容写入指定文件,同时支持内容缓存,减少文件读写操作public class FileUtil { public final static String filePath = "D:/TestFile/";原创 2020-12-18 20:28:30 · 1523 阅读 · 0 评论 -
Java-Arrays.copyOf和System.arraycopy()的关联与区别
Array.copyof源码/*Array.copyof()实现会调用System.arraycopy()的方法 *original :原数组,int newLength:新数组的长度 * 返回值:拷贝的新数组,属于深拷贝 */public static <T> T[] copyOf(T[] original, int newLength) { retu...原创 2020-04-12 12:42:49 · 288 阅读 · 0 评论 -
JDK 8在Windows 10安装与环境配置,以及在IDEA中的配置
前言在2019年11月,JAVA在ORACLE的官方版本已经升级到JAVA 13了,但是目前基本上商用的java web服务基本上还是用JDK 8作为自己JAVA项目的运行环境,如下源引国外一家的机构的调查结果,所以本文还是以JAVA8作为安装的例子。java 8的下载与安装我们可以在Oracle的官网上直接进行下载,但是好像需要注册并登录才能下载。下载链接:https://w...原创 2019-11-03 22:21:13 · 1010 阅读 · 0 评论 -
Java与Javascript的foreach循环的区别
Java中的 foreach循环是对变量进行循环。而Javascript是对对象的下标进行循环也就是说,在Javascript中,你无法在foreach循环中直接访问变量,需要借助下标来访问实际的对象。举例说明。Java的foreach循环样例public class Main{ public static void main(String[] args){ ...原创 2019-10-21 23:33:09 · 320 阅读 · 0 评论 -
Compareble和Comparator的比较
Comparable接口Comparable是java.lang包下的一个接口,源码如下:只有一个方法compareTo,Comparable/** @param <T> the type of objects that this object may be compared to* @author Josh Bloch* @see java.util.Compa...原创 2019-09-25 00:17:16 · 424 阅读 · 0 评论 -
Java的重写与重载
Overriding:方法重写、覆盖;子类保证原有方法的返回值,方法名,参数列表一致的前提下,在子类中将函数重新实现一遍。Overloading:方法重载;同一类中,返回值和方法名相同,参数列表不同的函数实现两者都是Java多态性的体现,方法重写是父类与子类之间多态性的体现,而方法重载主要是类内部多态性的体现,也就是说重载是编译时多态,因为在编译期间就已经决定了用哪个重载方法...原创 2019-08-25 15:39:50 · 164 阅读 · 0 评论