Java
初心江湖路
多学一分增一分。
展开
-
Java类加载机制的几个细节问题
1、类创建的时机啥时候触发了类的加载?jvms8里边的描述是:被其他接口或者类通过自身运行时常量池引用。通过特定JSE平台类库的方法调用(例如反射)。触发类的 creation。类加载器并不需要等到某个类被主动使用时才加载它,虚拟机规范允许类加载器在预料某个类将要被使用时预先加载好它。(这里的一个典型的体现是,在一个子类被主动使用时,若发现它有父类,则先加载其父类)。我们也可以总结出这并不...原创 2020-04-28 09:12:38 · 240 阅读 · 0 评论 -
零拷贝
首先,为了保证系统安全,用户态的执行权限限制使得用户程序不能直接访问磁盘数据。必须通过内核态的系统调用响应应用程序的请求。一、虚拟地址映射应用程序通过MMU(内存管理单元)来访问内存,MMU完成进程的虚拟地址空间到物理内存地址空间的映射。内核为每个进程分配一个独立并连续的虚拟内存空间,并为每个进程维护一个页表,页表记录着虚拟内存到物理内存的映射,页表就存在MMU中。一、传统IO发送文件的过...原创 2020-04-03 22:54:48 · 187 阅读 · 0 评论 -
ThreadLocal如何起作用的
首先,ThreadLocal是用来进行线程间的数据隔离的。我们知道一般对于共享数据的安全防护是用锁来实现的,这里我们看看ThreadLocal是怎么实现线程隔离从而保证数据安全的。其起作用的机制是为每个线程提供一个独立的变量副本。我们看是怎么做到的1、在Thread类当中,有如下代码ThreadLocal.ThreadLocalMap threadLocals = null;也就是说每...原创 2020-03-01 22:28:51 · 153 阅读 · 0 评论 -
Java类加载器及双亲委派
文章对应java8Java中类加载器有以下三种:1、启动类加载器(根类加载器Bootstrap ClassLoader)2、扩展类加载器(ExtClassLoader)3、应用类加载器(AppClassLoader)各加载器负责加载的类:Bootstrap ClassLoader:负责加载JAVA_HOME下lib目录下的类ExtClassLoader:负责加载JAVA_HOME下l...原创 2020-02-26 14:23:56 · 152 阅读 · 0 评论 -
类加载、链接、初始化——链接,初始化
链接(Linking)链接一个类或接口包括在必要时验证和准备该类或接口、其直接超类、直接超接口、及元素类型(如果是数组类)。解析类或者接口中的符号引用是链接的可选部分。对各JVM链接过程实现具有灵活性,但必须保留下列属性:1、在链接之前,类或者接口必须已经被完全加载;2、在初始化之前,类或者接口必须已经被完全验证和准备;3、链接过程中检测到的程序错误会抛出到程序中某个位置,在该位置上,程...原创 2020-02-13 18:16:21 · 383 阅读 · 0 评论 -
类加载、连接、初始化——加载
加载:根据类名寻找类或接口的二进制表示,并通过二进制表示创建类或者接口。连接:获取类或者接口并将其组合到虚拟机的运行时状态以便执行。初始化:执行类或者接口的初始化方法<cinit>首先我们看看类和接口的二进制表示是怎么转换成符号引用的?1 常量池虚拟机规范中的描述是,常量池就是JVM维护的一个运行时数据结构,主要用作Java等传统编程语言的的符号表。1.1 常量池构建时间...原创 2020-02-12 19:09:31 · 194 阅读 · 0 评论 -
Java应用怎么选择使用哪种GC
1、收集器的类型(1)、串行收集器,使用单线程执行全部垃圾回收工作(2)、并行收集器,使用多线程并行执行垃圾回收工作(3)、并发收集器,垃圾回收工作中大多数部分执行时是和应用程序并发执行2、各自适用的场景(1)对于串行收集器,专门针对单处理器小数据应用,因为没有线程间通信(同步)开销,因而其效率高。(2)对于并行收集器,minor垃圾收集使用多线程并行收集,人多力量大,所以很大程度上能...原创 2019-12-03 20:35:47 · 646 阅读 · 0 评论 -
Java接口interface field及method
一、接口中的域java编程规范中对interface中的域有几点说明,一个是interface域必须有初始化器,也就是说其必须被显式初始化。二是不能使用文本定义顺序靠后的字段来给前边字段赋值。三是不能使用自身对自身赋值。以下一个接口声明就有三处compile-time error。interface Test { int a;//第一处未初始化 float f = j;//第二处使用了...原创 2019-12-02 21:56:18 · 1357 阅读 · 0 评论 -
JVM使用GC分代收集的原由
一、首先看两个衡量GC性能的指标1、吞吐量该指标表示程序占用CPU执行的时间(包含分配内存的时间,不包括GC时间)占总时间的百分比。2、停顿时间该指标表示程序不响应的时间(正在进行垃圾回收)。吞吐量越大而停顿时间越小,表示GC性能越好。对于不同的应用有不同的需求,例如对于很多web应用来说,停顿时间太长会使用户明显感觉到卡顿,很影响用户体验。二、于是,通常通过调整以下参数来获得需要的...原创 2019-12-02 21:00:48 · 179 阅读 · 0 评论 -
Java常量池及域详解
本文针对ClassFile中的constant_pool及fields字段展开表述一、constant_pool虚拟机规范对其描述:java程序在虚拟机运行时,虚拟机指令并不依赖于类、接口、实例或数组的运行时布局,而是依赖于constant_pool中的符号信息。也就是说,java程序在运行的时候,是根据常量池中的各种符号信息来生成对应的指令。这里我是这么理解的,后续再深入JVM时,如果有问...原创 2019-11-06 19:32:53 · 215 阅读 · 0 评论 -
理解线程池原理及使用线程池
说明:文章内容均为基于个人理解,如有错误,请见谅并指出,大家一同进步,多谢 ^ _ ^。线程池原理:通过初始创建好一定数目的线程数量,来达到持续不断地任务并行处理的效果,并因此减少不断创建和销毁线程的开销。线程池核心实现:线程池的核心实现就在于ThreadPoolExecutor类。我们先看看其继承关系public class ThreadPoolExecutor extends Ab...原创 2019-10-19 12:02:56 · 248 阅读 · 0 评论 -
理解Java内存区域及其存放的内容
我们从编写的程序入手,先了解Java程序有哪些东西需要在内存中存放,有了这一了解之后,我们再看Java内存区域的划分就容易一些。一、我们编写的Java程序,JVM启动后,在内存中的类目清单 首先Java程序执行离不开class文件,我们所写的每一个类或者接口,编译之后都是.class文件。在写一个java程序,我们通常所见的条目有类(或者接口)、变量、对象、方法。这些条目在内存中如何存放,...原创 2019-10-11 14:55:16 · 360 阅读 · 0 评论 -
HotSpot虚拟机GC简单总结
具体的GC相关文章网络上很多,这里不去重复。本文简要总结GC算法和回收器。一、GC算法1、标记-清除给对象做标记,进行标记后每个对象对应一个状态,死亡、存活。标记完成后将标记为死亡的对象清除。2、标记-整理和标记-清除相比多一个步骤,将标记为死亡的对象清除后,还要将存活的对象整理到一起(逻辑空间连续)。3、复制空间被分成两个部分,只使用其中一个部分进行对象分配。当用来存储新对象的空...原创 2019-09-11 23:47:47 · 334 阅读 · 0 评论 -
为什么会有接口和抽象类
本文纯粹是个人理解和思考总结,如有错误,请帮忙指出,多谢。对应于java8抽象类和接口之间有没有既生瑜何生亮的问题呢?一、功能 可以说,抽象类和接口都算是一种抽象,是在某些共有特性上的抽离集成。个人觉得可以简单的理解为对公共行为、功能、属性的一种封装。可以限制继承者的随意性、保证功能一致性,同时也可以简化开发、提高效率、便于管理维护。二、抽象类和接口是否冗余不然,可以举个例子来说明一点...原创 2019-09-08 17:38:00 · 936 阅读 · 1 评论 -
JVM synchronized 详细探究
首先,同步在JVM中是通过monitor进入和monitor退出来实现的。1、synchronized 方法 对于synchronized方法,同步作为方法调用和返回的一部分被隐式执行,并不是使用monitorenter和monitorexit来实现方法同步。而是通过运行时常量池中方法对应的ACC_SYNCHRONIZED标志来实现同步。1.1 synchronized 方法怎么被识别?...原创 2019-08-15 16:47:04 · 208 阅读 · 0 评论 -
静态内部类、双重检查两种单例模式的详细探究
为什么用静态内部类来实现单例模式高效?<pre name="code" class="java">public class Singleton {private Singleton(){}private static class SingletonHandler{ private final static Singleton singleton = new Singleto...原创 2019-08-06 23:46:29 · 554 阅读 · 0 评论 -
如何深入理解归并排序
归并排序是计算机鼻祖冯·诺依曼提出的一种排序算法原理:利用分而治之的思想拆分要排序的数组特点:稳定(排序结果不改变原有相等的元素的顺序),对于大部分字段已经有序的情况能带来比较好的效率...原创 2019-08-13 15:47:50 · 369 阅读 · 0 评论