
JVM
扎个冲天揪
冲冲冲冲冲冲鸭
展开
-
JVM_内存分配和回收策略
1.内存分配1.对象优先在eden分配 对象先在新生代Eden区分配,当Eden区没有足够空间进行分配,虚拟机将发起 Minor GC2.大对象直接进入老年代 大对象指的是需要大量的连续内存空间的java对象。如很长的字符串或者数组 -XX:PretenureSizeThreshold:大于该值直接在老年代分配3.长期存活的对象直接进入老年代 设置对象...原创 2019-07-07 14:28:51 · 148 阅读 · 0 评论 -
JVM_对象已死
垃圾收集器再对堆进行回收前,第一个要做的事就是确定对象是否还存活,判断方法有2种1)引用计数法2)可达性分析1.引用计数法给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1;当引用失效时,计数器值-1。任何时刻计数值为0的对象就是不可能再被使用的。缺点:很难解决对象之间的相互循环引用问题,导致它们的引用计数都不为0,于是引用计数算法无法通知GC收集器收集它们。...原创 2019-07-07 14:29:44 · 165 阅读 · 0 评论 -
JVM_回收算法
JVM回收算法垃圾回收算法有4种标记-清除算法复制算法标记-整理算法分代收集算法1.复制算法可用的内存空间分为大小相等的两块,每次只是用其中的一块,当这一块被用完的时候,就将还存活的对象复制到另一块中,然后把原已使用过的那一块内存空间一次回收掉。这个算法常用于新生代的垃圾回收。优点复制算法解决了标记-清除算法的效率问题,以空间换时间。缺点但是当存...原创 2019-07-07 14:32:09 · 119 阅读 · 0 评论 -
JVM_垃圾回收器
JVM_垃圾收集器垃圾收集器一共有7种,如果说收集算法是内存回收的方法,那个垃圾收集器就是垃圾回收的具体实现。以中间绿线为界,上边三个用于年轻代,下边三个用在年老代,而G1则老少通吃,**黑线**线表示两个回收器可搭配使用,**红线**则表示两者可以在同一区域交替使用。由于G1在JDK1.7才达到商用级别,而且目前线上环境也很少使用。名称区域算法适用情况Seria...原创 2019-07-07 14:34:20 · 160 阅读 · 0 评论 -
jvm_线程TLAB局部缓存区域
JVM_线程TLAB局部缓存区域1.对象内存分配的两种方法Ø 指针碰撞 假设Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”Ø 空闲列表 如果Java堆中的内存并不是规整的,已使用的内存和空闲的内存相互交错,那就没...原创 2019-07-07 14:36:48 · 589 阅读 · 0 评论 -
JVM_内存泄漏和内存溢出
内存泄漏概念:一个不再被程序使用的对象或者变量还在内存中占有存储空间。(1)堆中申请的空间没有被释放(2)对象不在使用但还在内存中保留内存泄漏的原因:(1)静态集合类,如hashmap和vector,如果容器为静态,她们的生命周期与程序一致。(2)各种连接,如数据库连接,IO连接(3)监听器:通常一个应用中会用到多个监听器,但是在释放对象的同时往往没有相应的删除监听器(4...原创 2019-07-07 14:39:00 · 695 阅读 · 0 评论 -
JSR303参数校验
JSR303参数校验开发web项目有时候我们需要对controller层传过来的参数进行一些基本的校验,比如非空,非null,整数值的范围,字符串的个数,日期,邮箱等等。最常见的就是我们直接写代码校验,这样以后比较繁琐,而且不够灵活。故引出使用JSR303来做参数校验。参数校验的实现: 手机号和密码字段自定义注解为了让客户端显示更加友好需要自定义异常拦截器1. 添加依...原创 2019-07-07 15:33:21 · 286 阅读 · 0 评论