
java
文章平均质量分 91
bxsbl
!!!
展开
-
Thread Local, 内存泄漏
每个线程访问都会, 执行threadlocal.set()方法时候, 在线程自己的ThreadLocalMap中存储一份拷贝, 所以说是线程私有 但可能会造成内存泄漏问题 map的key是一个weakreference, 垃圾回收会自动清理, 变为null 但value 是强引用, 所以会造成内存泄漏, 但threadlocal,的remove()等方法会检测并且清除key为null此类entry, 消除内存泄漏 ...原创 2020-07-06 23:57:53 · 562 阅读 · 0 评论 -
CMS ---- G1
CMS 整体使用标记清除算法, 所以很容易产生内存碎片, 从而引起FULL GC, 又因为FULL GC 是Serial Old 是单线程, 全部堆STW所以哼慢很卡 大体步骤: 1. 初始标记 标记直接能与根之间关联的对象 2. 并发标记 3. 重新标记 在并发标记区间可能会出现漏标等现象, 处理通过写屏障完成(就是会将写操作记录下来) 4. 并发清除 由于是并发清除, 所以垃圾回收和用户线程同时产生, 所以可能会产生浮动垃圾 mark 算法采用三数扫描算法 1. 自己被标记, 子对象被标原创 2020-07-06 23:51:04 · 299 阅读 · 0 评论 -
复习~Java的内存模型
Java的JVM的内存模型大概分为下面几部分 线程私有: 1. 程序计数器, 相当于程序执行的行号指示器 2. Java虚拟机栈, 也叫方法内存模型, 每一个方法都会创建一个栈针用来存储出口信息, 局部变量表, 操作数栈等信息 3. Java本地方法栈, 为native方法服务 线程共享: 1. 堆, 用来存储创建的对象实体等 2. 方法区 存储类的元信息, 常量池, 静态变量, -> 是一种规范, 只有在Hotspot中&java1.7之前实现体是永久区, 1.8之后是元...原创 2020-07-06 23:17:57 · 171 阅读 · 0 评论 -
面试 复习JVM
Java虚拟机 Java编译器的输出是字节码(byteCode).字节码是一套设计用来在java运行时系统下执行的高度优化的指令集,该Java运行时系统称为Java虚拟机(Java Virtual Machine, JVM). 在其标准形式下,JVM就是一个字节码解释器. 运行时数据区 1 程序计数器 可以看做是线程执行的字节码行号指示器 2 Java虚拟机栈 虚拟机描述的是Java方法执行的内存...原创 2019-10-11 21:12:12 · 154 阅读 · 0 评论 -
cglib CGLIB(Code Generation Library)
cglib代理 静态和动态代理都需要实现接口,以此来创建代理类 而cglib代理则不需要实现接口, 是创建一个增强的子类. 所以符合java规范 一般分为四步 确定核心类 Enhancer enhancer = new Enhancer(); 要确定父类 enhancer.setSuperclass(被代理类.class); //也就是需要被代理类的class文件 设置回调函数 参数...原创 2019-08-04 16:17:33 · 154 阅读 · 0 评论 -
动态代理设计模式(核心内容)
jdk动态代理使用InvocationHandler实现,最终生成的代理类是: public final class $Proxy0 extends Proxy implements Subject { } 首先明白动态代理类是静态代理的加强版本, 不用每次增加实现一个接口而写多个代理类, 动态代理简而言之,就是对于一个对象,在调用其方法时,能够附加的做些其他操作而产生的。 ...原创 2019-04-27 11:53:04 · 454 阅读 · 0 评论 -
java泛型的限制
基本类型 基本类型不能用做类型参数 instanceof instanceof 检测和类型转换工作支队原始类型进行, //假设都有add()一个值的和get()一个值方法 A<Integer> a = new A<>(); a.add(10); Object c = a; A<String> b = (A<String>) c; Sting s ...原创 2019-07-24 12:05:54 · 106 阅读 · 0 评论 -
求解 为什么 Scanner 的nextInt()之后的 nextLine() 会直接跳过
nextInt()后再加多余一行nextLine()就能解决这个问题;求大佬给出正确解释;原创 2019-07-03 20:14:42 · 778 阅读 · 2 评论 -
多线程sleep和yield的区别
sleep和yield的区别: a.sleep方法暂停当前线程,会给其他线程执行机会,不会理会其他线程的优先级;但yield方法只会给优先级相同,或优先级更高的 线程执行机会。 b.sleep方法会将线程转入阻塞状态,知道经过阻塞时间才会转入就绪状态,而yield不会将线程转入阻塞状态,它只是强制当前线程进入就绪状态。因此完全有可能某个线程调用yield方法暂停...翻译 2019-05-31 00:10:41 · 368 阅读 · 0 评论 -
CAS的ABA问题(乐观锁策略)
CAS(compare and swap)乐观锁策略。 CAS(V, O, N) V:内存中实际的值 O:期望的值,也是当前线程持有的值 N:想要改变成的新值 假设有两个线程 A 和 B A,和B同时拿到内存中的V值==M也是就是期望值, A线程 判断内存中的值等于期望值可以改 ------>将 内存中V值改位 N ,,,经过一些操作又将内存中的V值改成M, 而此时B...原创 2019-05-29 14:04:20 · 907 阅读 · 0 评论 -
关于史上最简单考虑动态规划解决背包问题...学习java的菜鸟有话要说
我学习动态规划时,学到背包问题的时候…简直是…连抓头发的行为都不敢有… 查阅了好多大佬的关于背包问题的讲解,也是云里雾里总感觉不是一个层次. 下面就让菜鸟讲一下菜鸟所理解最简单的背包问题, 先抛出一个问题: 有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小和数组 V 表示每个物品的价值. 问最多能装入背包的总价值是多大? 现在让我们问题具体化,我们假定 1.A数组的长度为...原创 2019-07-22 18:51:43 · 117 阅读 · 0 评论