Gary's Blog

  • 首页

  • 标签9

  • 分类9

  • 归档9

JVM(二):JAVA堆

发表于 2019-05-10 | 分类于 JAVA , JVM

摘自:https://blog.csdn.net/en_joker/article/details/79737533
摘自:https://www.cnblogs.com/cjsblog/p/9850300.html
摘自:https://lhc1986.iteye.com/blog/1421832

堆内存划分

  在JDK1.7以及其前期的JDK版本中,堆内存通常被分为三块区域:Young Generation、Old Generation、Permanent Generation for VM Matedata

  在JDK1.8中把存放元数据中的永久内存从堆内存中移到了本地内存中,JDK1.8中JVM堆内存结构就变成了如下:

阅读全文 »

JVM(一):JVM内存模型

发表于 2019-05-10 | 分类于 JAVA , JVM

摘自:https://www.cnblogs.com/cjsblog/p/9850300.html
摘自:https://blog.csdn.net/itermeng/article/details/74977888
摘自:(https://blog.csdn.net/laomo_bible/article/details/83067810

运行时区域内存

  Java虚拟机在执行Java程序时会将其管理的区域划分为不同的数据区域,不同区域之间拥有各自用途、创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,而有的区域则依赖用户线程的生命周期。

名称 特征 作用 配置参数 异常
程序计数器 占用内存小,线程私有,生命周期与线程相同 大致为字节码行号指示器 无 无
虚拟机栈 线程私有,生命周期与线程相同,使用连续的内存空间 Java 方法执行的内存模型,存储局部变量表、操作栈、动态链接、方法出口等信息 -Xss StackOverflowError
OutOfMemoryError
java堆 线程共享,生命周期与虚拟机相同,可以不使用连续的内存地址 保存对象实例,所有对象实例(包括数组)都要在堆上分配 -Xms
-Xsx
-Xmn
OutOfMemoryError
方法区 线程共享,生命周期与虚拟机相同,可以不使用连续的内存地址 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 OutOfMemoryError
运行时常量池 方法区的一部分,具有动态性 存放字面量及符号引用    
阅读全文 »

前后端分离-JWT

发表于 2019-04-17 | 更新于 2019-05-10 | 分类于 JWT

参考:jwt.io
参考:https://blog.csdn.net/bntx2jsqfehy7/article/details/79224042
参考:https://blog.csdn.net/kevin_lcq/article/details/74846723
参考:https://www.cnblogs.com/eret9616/p/9661314.html

Cookie&Session

HTTP的无状态性

  HTTP 是无状态协议,它不对之前发送过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。假设要求登录认证的 Web 页面本身无法进行状态的管理(不记录已登录的状态),那么每次跳转新页面不是要再次登录,就是要在每次请求报文中附加参数来管理登录状态。

  不可否认,无状态协议当然也有它的优点。由于不必保存状态,自然可减少服务器的 CPU 及内存资源的消耗。从另一侧面来说,也正是因为 HTTP 协议本身是非常简单的,所以才会被应用在各种场景里。

阅读全文 »

HashMap实现原理及源码分析-JDK1.7

发表于 2019-04-17 | 更新于 2019-05-10 | 分类于 JAVA , JAVA集合类

摘自:https://www.cnblogs.com/chengxiao/p/6059914.html
摘自:https://www.cnblogs.com/dijia478/p/8006713.html

数据结构

  HashMap中的数据结构是数组+单链表的组合,以键值对(key-value)的形式存储元素的,通过put()和get()方法储存和获取对象。

什么是哈希表(hash table)

  在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能

  数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)

  线性链表:对于链表的新增,删除等操作(在找到指定操作位置后),仅需处理结点间的引用即可,时间复杂度为O(1),而查找操作需要遍历链表逐一进行比对,复杂度为O(n)

  二叉树:对一棵相对平衡的有序二叉树,对其进行插入,查找,删除等操作,平均复杂度均为O(logn)。

  哈希表:相比上述几种数据结构,在哈希表中进行添加,删除,查找等操作,性能十分之高,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为O(1),接下来我们就来看看哈希表是如何实现达到惊艳的常数阶O(1)的。

阅读全文 »

Spring Boot (一):自动配置实现原理一

发表于 2019-03-31 | 更新于 2019-05-10 | 分类于 JAVA , Spring Boot

SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @ConfigurationProperties等几个注解来进行自动配置完成的。

@EnableAutoConfiguration 开启自动配置,主要作用就是调用 Spring-Core 包的 loadFactoryNames(),将 autoconfig 包里的已经写好的自动配置加载进来。

@Conditional 条件注解,通过判断类路径下有没有相应配置的 jar 包来确定是否加载和自动配置这个类。

@EnableConfigurationProperties 的作用就是,给自动配置提供具体的配置参数,只需要写在 application.properties或application.yml 中,就可以通过映射写入配置类的 POJO 属性中。

阅读全文 »

Elasticsearch 查询语法

发表于 2019-03-31 | 更新于 2019-04-16 | 分类于 Elastic

英文文档(最新)

中文文档(2.x)

轻量检索(URL search)

1
GET /megacorp/employee/_search?q=last_name:Smith

参数说明详见

查询表达式

Query-string 搜索通过命令非常方便地进行临时性的即席搜索 ,但它有自身的局限性(参见 轻量 搜索)。Elasticsearch 提供一个丰富灵活的查询语言叫做 查询表达式 , 它支持构建更加复杂和健壮的查询。

领域特定语言 (DSL), 指定了使用一个 JSON 请求。我们可以像这样重写之前的查询所有 Smith 的搜索

1
2
3
4
5
6
7
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
阅读全文 »

Database Change Notification + AQ 基于流的表变化通知

发表于 2019-03-28 | 更新于 2019-05-10 | 分类于 数据库

Streams Advanced Queuing User’s Guide(pl/sql)
Database JDBC Developer’s Guide
Oracle高级队列介绍

Database Change Notification’docs-jdbc-style
DCN plsql-style
CQN

设置消息队列

阅读全文 »

Hexo 简单使用

发表于 2019-03-28 | 更新于 2019-04-17 | 分类于 前端
  1. npm安装

    1
    npm install hexo -g
  2. 查看版本号

    1
    hexo -v
阅读全文 »

JAVA 类加载机制

发表于 2017-11-05 | 更新于 2019-05-10 | 分类于 JAVA , 类加载机制

摘自:https://blog.csdn.net/qq_16216221/article/details/71600535
摘自:http://www.importnew.com/25295.html
摘自:https://blog.csdn.net/noaman_wgs/article/details/74489549
摘自:https://www.cnblogs.com/ityouknow/p/5603287.html

一、概述

  类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。

  JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。

  由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。

阅读全文 »
Gary

Gary

主攻JAVA。
9 日志
9 分类
9 标签
GitHub
© 2019 Gary
|