JVM学习之垃圾回收器

剑指 Offer12

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。(保证数组的稳定性)

//输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,
// 所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
public class Offer12 {
    public static void main(String[] args) {
        int[] a ={1,2,3,4,5,6,7,8,9};
        Offer12 offer12 = new Offer12();
        offer12.solution1(a);
        System.out.println(Arrays.toString(a));
        int[] ints = offer12.solution2(a);
        System.out.println(Arrays.toString(ints));
    }

    public void solution1(int[] a){
        for (int i = a.length-1; i >1 ; i--) {
            for (int j = 0 ;j<i ; j++){
                if (a[j]%2==0&&a[j+1]%2==1){
                    int temp =a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
    }


    public int[] solution2(int[] a){
        int count=0;
        int j=0;
        int[] b =new int[a.length];
        for (int i = 0; i <a.length ; i++) {
            if (a[i]%2==1){
                count++;
            }
        }
        for (int i = 0; i <a.length ; i++) {
            if (a[i]%2==1){
                b[j++]=a[i];
            }else{
                b[count++]=a[i];
            }
        }
        return b;

    }
}

垃圾回收器概述

GC分类与性能指标

吞吐量:运行用户代码的事件占总运行时长时间的比例
暂停时间:执行垃圾收集器时,程序的工作线程被暂停的时间
内存占用:java堆区所占的大小
一般一款优秀的垃圾回收器满足其中的两项

垃圾回收器的分类

串行回收器:Serial 、Serial Old
并行回收器:ParNew、Parallel Scavenge、Parallel Old
并发回收器:CMS、G1

7款经典收集器与垃圾分代之间的关系


新生代收集器:Serial、ParNew、Paralle1 Scavenge;

老年代收集器:Serial old、Parallel old、CMS;

整堆收集器:G1;

Serial回收器:串行回收

Serial收集器采用复制算法、串行回收和"stop-the-World"机制的方式执行内存回收。

除了年轻代之外,Serial收集器还提供用于执行老年代垃圾收集的Serial old收集器。Serial old收集器同样也采用了串行回收和"stop the World"机制,只不过内存回收算法使用的是标记-压缩算法。

ParNew回收器:并行回收

  • Par是Parallel的缩写,New:只能处理的是新生代

  • ParNew 收集器除了采用并行回收的方式执行内存回收外,两款垃圾收集器之间几乎没有任何区别。ParNew收集器在年轻代中同样也是采用复制算法、"stop-the-World"机制。

Parallel回收器:吞吐量优先

JDK8中默认采用Parallel收集器和Parallel Old收集器组合使用
Parallel old收集器采用了标记-压缩算法,但同样也是基于并行回收和"stop-the-World"机制。

G1回收器:区域化分代式

JDk8之后使用的
G1垃圾回收器的回收过程

  • 年轻代GC(Young GC)
  • 老年代并发标记过程(Concurrent Marking)
  • 混合回收(Mixed GC)
    优点
    并行与并发
  • 并行性:G1在回收期间,可以有多个GC线程同时工作,有效利用多核计算能力。此时用户线程STW
  • 并发性:G1拥有与应用程序交替执行的能力,部分工作可以和应用程序同时执行,因此,一般来说,不会在整个回收阶段发生完全阻塞应用程序的情况
    分代收集
  • 从分代上看,G1依然属于分代型垃圾回收器,它会区分年轻代和老年代,年轻代依然有Eden区和Survivor区。但从堆的结构上看,它不要求整个Eden区、年轻代或者老年代都是连续的,也不再坚持固定大小和固定数量。
  • 将堆空间分为若干个区域(Region),这些区域中包含了逻辑上的年轻代和老年代。
  • 和之前的各类回收器不同,它同时兼顾年轻代和老年代。对比其他回收器,或者工作在年轻代,或者工作在老年代;

VUE中的时间修饰符

修饰符:作为用来和时间连用,决定促发条件或者是阻止时间的触发机制。

  • stop事件修饰符:用来阻止事件冒泡
<body>
<div id="app">
    <div class="div1" @click="divClick">
        <input type="button" value="点击我" @click.stop="btnClick">
    </div>
</div>
<script type="text/javascript">
    const app = new Vue({
        el: "#app",
        data: {},
        methods: {
            btnClick(){
                alert("按钮被点击了")
            },
            divClick(){
                alert("div被点击了")
            }
        }
    })
</script>
  • prevent事件修饰符,用来阻止标签的默认行为
<a href="http://www.baidu.com" @click.prevent="a">百度</a>
  • self事件修饰符,用来针对与当前标签的事件触发,只触发自己标签上特定修饰符的事件,只关心自己标签上的事件。
  • once事件修饰符,只让事件触发一次

按键修饰符

**作用:**用来与键盘中按键事件绑定在一起,用来修饰特定的按键.

  • .enter
  • .tab
  • .detele
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

axios

引言: axios是一个一部请求技术,核心技术是用来再页面中发送异步请求,并获取对应数据再页面中的渲染,相当于局部更新技术Ajax

执行get请求

// 为给定 ID 的 user 创建请求
axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

// 可选地,上面的请求可以这样做
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

执行post请求

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值