随笔分类 - Java
摘要:1. 概述 一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域 Java 堆区在 JVM 启动时被创建,空间大小也就确定了。是 JVM 管理的最大一块内存空间,堆空间大小是可调节的 虚拟机规范规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的 所有的线程共享
阅读全文
摘要:1. 虚拟机栈概述 由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 栈是运行时的单位,而堆是存储的单位。 即栈解决程序的运行问题,即程序如何执行,
阅读全文
摘要:1. 程序计数器 JVM 种的程序计数器(Program Counter Register)中,Register 的命名源于 CPU 的寄存器,寄存器存储指令相关的现场信息。CPU 只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其翻译为 PC 计数器(或指令计数器)更
阅读全文
摘要:1. 运行时数据区 运行时数据区详细 详解 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机的启动而创建,随着虚拟机的退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程的开始和结束而创建和销毁。 灰色的为单独线程私有的,红色的为多个线程共
阅读全文
摘要:类加载器子系统作用: 类加载器子系统负责从文件系统或网络中加载 Class 文件,class 文件在文件开头都有特定的文件标识。 Class Loader只负责class文件的加载,至于是否可以运行,则由Execution Engine决定 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外
阅读全文
摘要:HTTP 请求发送之后,服务端需要对请求数据进行解析,但是服务端并不知道请求给我的数据是什么,所以需要规定我按照什么规则进行解析,一般服务器都根据Content-Type 字段来明确请求数据是如何编码的,然后对其进行解析。Content-Type 常见的编码方式有:application/x-www
阅读全文
摘要:使用 HttpClient 发送 post 请求,但发出去的请求体里的英文正常,中文全是问号,需要设置以下 HttpClient client = HttpClients.createDefault(); // 构造 POST 参数 ArrayList<NameValuePair> postData
阅读全文
摘要:注解所属框架 @RequestParam 和 @PathVariable 注解是用于从 request 中接收请求的,两个都可以接收参数,关键点不同的是 @RequestParam 是从 request 里面拿取值,而 @PathVariable 是从一个URI模板里面来填充 所属平台获取url模板
阅读全文
摘要:一、Lambda 表达式 Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 -> ,该操作符被称为Lambda 操作符或剪头操作符。 它将 Lambda 分为两个部分: 左侧:指定了 Lambda 表达式需要的所有参数 右侧:指定了 Lambda 体,即 Lambd
阅读全文
摘要:一、摘要算法 MD5 public static String getmd5(String path) { String pathName = path; String md5 = ""; try { // 读入文件 File file = new File(pathName); FileInput
阅读全文
摘要:一、synchronized synchronized的三种应用方式 synchronized作用于实例方法 作用于当前实例加锁,进入同步代码前要获得当前实例的锁 所谓的实例对象锁就是用synchronized修饰实例对象中的实例方法,注意是实例方法不包括静态方法。 synchronized作用于静
阅读全文
摘要:概述 以下基于 JDK 1.8 数据结构 HashMap 实际是一种“数组+链表”数据结构。 在put操作中,通过内部定义算法寻止找到数组下标,将数据直接放入此数组元素中,若通过算法得到的该数组元素已经有了元素(俗称hash冲突,链表结构出现的实际意义也就是为了解决hash冲突的问题)。将会把这个数
阅读全文
摘要:双重检查锁定的设想: 多个线程试图在同一时间创建对象,会通过加锁来保证只有一个线程能创建对象 在对象创建好后,执行 getInstance() 方法将不需要获取锁,直接返回已创建好的对象 对于 Instance 类,以下是双重检查锁定代码 public class DoubleCheckedLock
阅读全文
摘要:一、理论算法 引用计数法 比较古老经典的垃圾手机算法,核心是在对象被其他所引用时计数器 +1,而当引用失效时则 -1 这种方式有个严重的问题:无法处理循环引用的情况,还有每次进行加减操作比较浪费系统性能。 标记清除法 分为标记和清除两个阶段进行处理内存中的对象 弊端是空间碎片问题,垃圾回收后的空间是
阅读全文
摘要:1.类加载子系统 负责从文件系统或者网络中加载 Class 信息,加载的信息存放在一块称为方法区的内存空间。 2.方法区 就是存放类信息,常量信息,常量池信息,包括字符串字面量和数字常量等 3.Java 堆 在 Java 虚拟机启动的时候建立 Java 堆,它是 Java 程序最主要的内存工作区域,
阅读全文
摘要:类从加载到运行到销毁过程 类加载器过程 1.加载 加载 把二进制形式的 Java 类型读入到 Java 虚拟机中 2.连接过程中的 3 个子过程 验证 对 class 字节码验证 准备 为类变量分配内存,设置默认值。 但是在到达初始化之前,类变量都没有初始化为真正的初始值 解析 解析过程就是在类型的
阅读全文
摘要:接口初始化规则 当一个接口在初始化时,并不要求其父接口都完成了初始化 只有在真正使用父接口的时候 (如引用接口中所定义的常量时),才会初始化 public class MyTest5 { public static void main(String[] args) { System.out.prin
阅读全文
摘要:编译期常量 当一个常量的值并非编译期间可以确定的,那么其值就不会放到调用类的常量池中 这时在程序运行时,会主动使用这个常量所在的类,显然会导致这个类会被初始化,输出静态代码块中语句 public class MyTest3 { public static void main(String[] arg
阅读全文
摘要:VM 参数 -XX:+<option> 表示开启 option 选项 -XX:-<option> 关闭 option 选项 -XX:<option>=<value> 将 option 选项的值设置为 value 比如堆空间大小 -XX:+TeaceClassLoading 用于追踪类的加载信息并打印
阅读全文
摘要:类加载 Class Loading 在 Java 代码中,类型的加载、连接与初始化过程都是在程序运行期间完成的 提供了更大的灵活性,增加了更多的可能性 生命周期 以下情况,Java 虚拟机将结束生命周期 执行了 System.exit() 方法 程序正常执行结束 程序在执行过程中遇到了异常或错误而异
阅读全文

浙公网安备 33010602011771号