轻松学JVM(一)——基本原理】的更多相关文章

轻松学JVM(一)——基本原理 前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点. 运行流程 我们都知道java一直宣传的口号是:一次编译,到处运行.那么它如何实现的呢?我们看下图: java程序经过一次编译之后,将java代码编译为字节码也就是class文件,然后在不同的操作系统上依靠不同的java虚拟机进行解释,最后再转换为不同平台的机器码,最终得到执行.这样我…
前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则jvm则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解jvm必要的知识点. 运行流程 我们都知道java一直宣传的口号是:一次编译,到处运行.那么它如何实现的呢?我们看下图: java程序经过一次编译之后,将java代码编译为字节码也就是class文件,然后在不同的操作系统上依靠不同的java虚拟机进行解释,最后再转换为不同平台的机器码,最终得到执行.这样我们是不是可以推演,如果要在mac…
我们都知道java语言与C语言最大的区别就是内存自动回收,那么JVM是怎么控制内存回收的,这篇文章将介绍JVM垃圾回收的几种算法,从而了解内存回收的基本原理. stop the world 在介绍垃圾回收算法之前,我们需要先了解一个词"stop the world",stop the world会在执行某一个垃圾回收算法的时候产生,JVM为了执行垃圾回收,会暂时java应用程序的执行,等垃圾回收完成后,再继续运行.如果你使用JMeter测试过java程序,你可能会发现在测试过程中,ja…
上一篇我们介绍了JVM的基本运行流程以及内存结构,对JVM有了初步的认识,这篇文章我们将根据JVM的内存模型探索java当中变量的可见性以及不同的java指令在并发时可能发生的指令重排序的情况. 内存模型 首先我们思考一下一个java线程要向另外一个线程进行通信,应该怎么做,我们再把需求明确一点,一个java线程对一个变量的更新怎么通知到另外一个线程呢?我们知道java当中的实例对象.数组元素都放在java堆中,java堆是线程共享的.(我们这里把java堆称为主内存),而每一个线程都是自己私有…
一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于分类的范畴.首先,支持向量机不是一种机器,而是一种机器学习算法.在数据挖掘的应用中,与无监督学习的聚类相对应和区别.广泛应用于机器学习,计算机视觉和数据挖掘当中.(本文原创,转载必须注明出处.) 目录 1 机器学习:一步步教你轻松学KNN模型算法 2 机器学习:一步步教你轻松学决策树算法 3 机器学…
前言 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进阶,适合没有 .NETCore 编程经验到小白同学,也适合从 .NET Framework 迁移到 .NETCore 的朋友. 本系列从安装环境开始,到认识各种配置文件.然后学习了自定过滤器实现.日志监视.异步任务.多线程.缓存使用.网络通讯.单元测试.常规部署到容器化部署等一系列等文章,每一篇文章都配置了示例代码Demo,大家可以通过每篇文章的末尾找到下载示例代码的链接. 目前,所有的示例代…
前言 上一篇文章 Asp.NetCore轻松学-部署到 Linux 进行托管 介绍了如何在 Centos 上部署自托管的 .NET Core 应用程序,接下来的内容就是介绍如何使用第三方任务管理程序来托管 .NET Core 应用程序,这里以笔者常用的 Supervisor 为例子,从安装环境开始,一步一步的进入 Linux 的世界,部署程序还是以上一篇的项目文件 Deploy.Linux 为基础. 1. 安装前置条件 Centos 和 ubuntu 下,安装 supervisor 的步骤有所不…
前言 在上一篇文章中(Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库)[https://www.cnblogs.com/viter/p/10243577.html],介绍了 EFCore 连接 MSSQL 的使用方法,在本章中,将继续介绍如何利用 EFCore 连接到 MariaDB/MySql 和 PostgreSQL 数据库,同时,在一个项目中,如何添加多个数据库上下文对象,并在业务中使用多个上下文对象,通过这两章的学习,你将掌握使用 EFCore 连接 MS…
前言     在上一章 Asp.Net Core 轻松学-多线程之Task快速上手 文章中,介绍了使用Task的各种常用场景,但是感觉有部分内容还没有完善,在这里补充一下. 1. 任务的等待 在使用 Task 进行基于队列的异步任务(TAP)的时候,对于刚入门的同学来说,只是简单的了解了使用 Task 可以在后台处理异步任务,但是对于阻塞调用可能还有有一些不太明白,异步任务默认是不阻塞的执行过程,当一个 Task 被创建出来的时候,并没有被压入队列中,而是开始执行的时候,才会进入队列中:执行一个…
前言     在进行 Asp.Net Core 应用程序开发过程中,通常的做法是先把业务代码开发完成,然后建立单元测试,最后进入本地系统集成测试:在这个过程中,程序员的大部分时间几乎都花费在开发.运行.调试上,而且一再的重复这个过程,我称这个过程为"程序员开发螺旋",并且在这个步骤中,重复率最高且没有创造力的工作就是启动.测试,作为程序员,努力提高生产力我们追求的目标,我们的工作就是尽量消灭重复劳动,解放生产力,提高产出效率:下面就通过一个简单的例子来演示,如何通过文件监视进行快速开发…