
Java
魏树鑫
天再高又怎样,踮起脚尖就更接近阳光。
展开
-
try catch finally return 执行顺序
public class TryTest { public static void main(String[] args) { String result = get(); System.out.println(result); } public static String get(){ int ...原创 2018-04-10 12:17:54 · 140 阅读 · 0 评论 -
Java 浅克隆、深克隆
浅克隆只复制了基本数据类型和String数据类型以及对应的数组类型,其他引用数据类型只是复制了引用地址;使用方式实现Cloneable接口,然后重写clone方法,调用super.clone()即可public static class Person implements Cloneable { @Override protected Person clone...原创 2019-06-01 20:39:00 · 262 阅读 · 0 评论 -
Android OOM问题的What Where How
知己知彼,百战不殆。要想解决和避免OOM,必须先知道OOM是什么,在哪里会发生,最后才是怎样去解决OOM;What?什么是OOMOOM --> java.lang.OutOfMemoryError内存溢出,应用内存占用过高,虚拟机无法再分配更多的内存,这时系统就会抛出OOM,JVM规范中划定了大部分区域的内存的管理,可参考JVM规范官方文档:https://docs.oracle...原创 2019-05-17 21:23:51 · 164 阅读 · 0 评论 -
Java 字节码阅读
很多时候我们通过代码无法了解字节码执行过程,比如Try Catch Finally的执行过程,只有通过debug或者阅读字节码才能搞懂JVM是如何编译和设计执行流程的。public class TestTryCatch { public String inside() { int a = 1; int b = 10; a = b; ...原创 2019-05-17 10:16:31 · 166 阅读 · 0 评论 -
Java Json数据中有双引号"未转义的解析报错
例如Json数据中有双引号,解析时会报Json格式错误或者转义有问题{ "content": "重要任务提醒", "matterName": ""德勤57"装砂滞留船期损失案"}可以在解析前现将Json格式化一遍,这里面主要是双引号匹配的查找 public static String formatErrorJson(String s) { char[] temp ...原创 2019-05-13 20:26:03 · 2714 阅读 · 1 评论 -
JVM 内存分配与垃圾回收
一、JVM内存分配1. 堆(Heap)线程共享区域,在虚拟机启动时创建;主要存放对象的实例,Java虚拟机规范中描述:所有的对象实例以及数组都要在堆上分配;Java虚拟机规范,堆可以处于物理上不连续的空间,只要逻辑上连续就行;垃圾收集器基本采用分代收集法,所以可分为新生代和老年代;新生代(YoungGen)占堆大小的1/3,几乎所有的对象创建时分配的空间都在新生代中;Mino...原创 2019-04-25 10:37:44 · 263 阅读 · 0 评论 -
Java ClassLoader类加载机制(一)原理
类加载的理论知识1. 类的生命周期生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个部分统称为连接(Linking)2. 类什么时候初始化?遇到new、getstatic、putstat...原创 2019-04-26 16:06:22 · 274 阅读 · 0 评论 -
Map集合源码解析与对比
HashMap数据结构HashMap是基于hashing的原理; value>插到table[i]中,如果有两个不同的key被算在了同一个i,那么就叫冲突,又叫碰撞,这样会在table[i]上形成一个链表扩容原理:HashMap的扩容因子或负载因子为0.75,初容量1<<4=16,最大容量1<<30= 2^30 ;当一个map填满了75%的bucket时候,和其...原创 2019-04-25 10:40:26 · 318 阅读 · 0 评论 -
Java 内存模型
JMM(Java 内存模型)主内存与工作内存JMM规定JVM有主内存(Main Memory)和工作内存(Working Memory),主内存其实就是我们平常所说的Java堆内存,存放所有类实例变量等,这部分内存是多个线程共享的;工作内存里存放的则是线程从主内存拷贝过来的变量以及访问方法得到的临时变量,这部分内存为线程私有,其他的线程不能访问。注:上面所说的拷贝并不是拷贝整个对象实例到工...原创 2019-04-25 10:39:40 · 115 阅读 · 0 评论 -
Java ClassLoader类加载机制(二)类加载器
1. 类加载的种类启动类加载器,Bootstrap ClassLoader,最顶层的加载类,主要加载核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。另外需要注意的是可以通过启动jvm时指定-Xbootclasspath和路径来改变Bootstrap ClassLoader的加载目录。比如java -Xbootclass...原创 2019-04-29 16:54:35 · 151 阅读 · 0 评论 -
位运算
以8位为例,位数不足,用0补齐,例如5的二进制是101,则为0000 0101反码0、1互换,按位取反则为反码原码 0000 0011反码 1111 1100补码,二进制中的负数反码+1则为补码,补码在计算机表示负数原码 0000 0000 0000 0000 0000 0000 0000 0011反码 1111 1111 1111 1111 ...原创 2019-06-14 12:46:40 · 184 阅读 · 0 评论