![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
songwenbinasdf
这个作者很懒,什么都没留下…
展开
-
Java 内存模型 JMM 浅析
JMM简介Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无关具体平台的统一的保证。(可能在术语上与Java运行时内存分布有歧义,后者指堆、方法区、线程栈等内存区域)。并发编程有多种风格,除了CSP(通信顺序进程)、Actor等模型外,大家最熟悉的应该是基于线程和锁的共享内存模型了。在多线程编程中,需转载 2017-11-08 16:22:01 · 169 阅读 · 0 评论 -
Java之深入JVM(3) - 由一个栈溢出的问题看Java类和对象的初始化
今天,在一个群里面有网友问到这样一个问题,以下代码被调用运行时为何会造成栈溢出(StackOverflowError)的错误:public class Constructor { Constructor c = new Constructor(); public static void main(String[] args) { Constructor tes转载 2017-11-15 16:28:48 · 177 阅读 · 0 评论 -
JVM 指令中单词的缩写
bipush : byte immediate pushsipush : short immediate pushldc : load constant原创 2017-11-30 14:03:22 · 620 阅读 · 0 评论 -
java之yield(),sleep(),wait()区别详解
1、sleep()使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程执行转载 2017-12-01 16:20:11 · 147 阅读 · 0 评论 -
ySQL性能优化的21个最佳实践和mysql使用索引
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。转载 2017-12-05 16:19:29 · 544 阅读 · 0 评论 -
Java常量池(静态常量池与运行时常量池)
1、什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。 1)所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。 ...转载 2018-03-02 11:12:50 · 31043 阅读 · 22 评论 -
2017 最新java面试题(技术面试)
1、servlet执行流程客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request、response对象传递给找到的servlet,servlet根据request就可以知道是谁发出的请求,请求信息及其他信息,当servlet处理完业务逻辑后会将信息放入到response并响应到客户端。2、s...转载 2018-03-02 11:44:17 · 319 阅读 · 0 评论 -
sku组合查询算法探索
在前端领域,很少会遇到算法问题,这不能说不是一种遗憾。不过,随着前端处理的任务越来越复杂和重要,偶尔,也能遇到一些算法上的问题。本文,所要讨论的,就是这样一样问题。什么是SKU问题来自垂直导购线周会的一次讨论,sku组合查询,这个题目比较俗,是我自己取得。首先,看下什么是sku,来自维基百科的解释:最小存货单位(Stock Keeping Unit)在连锁零售门店中有时称单品为一个SKU,定义为保...转载 2018-04-16 09:05:40 · 2353 阅读 · 0 评论 -
netty源码之 DefaultEventExecutorChooserFactory 之2的整数次幂设计
package io.netty.util.concurrent;import io.netty.util.internal.UnstableApi;import java.util.concurrent.atomic.AtomicInteger;/** * Default implementation which uses simple round-robin to choose next {@...原创 2018-06-01 09:37:30 · 454 阅读 · 0 评论 -
jdk8 hashcode 扰动函数
static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }原创 2018-07-03 10:10:16 · 1098 阅读 · 0 评论 -
lucene 分配数组大小 (newSize + 1) & 0x7ffffffe
public static int oversize(int minTargetSize, int bytesPerElement) { if (minTargetSize < 0) { // catch usage that accidentally overflows int throw new IllegalArgumentException("inval...原创 2018-06-28 10:17:51 · 354 阅读 · 0 评论 -
字符串匹配算法之:有限状态自动机
阅读博客的朋友可以参看视频: 如何进入google,算法面试技能全面提升指南什么叫有限状态自动机先看一个图: 上面这个图描述的就叫一个有限状态自动机,图中两个圆圈,也叫节点,用于表示状态,从图中可以看成,它有两个状态,分别叫0和1. 从每个节点出发,都会有若干条边,当处于某个状态时,如果输入的字符跟该节点出发的某条边的内容一样,那么就会引起状态的转换。例如,如果当前状态处于0,输入是字符a,那么状...转载 2018-06-28 10:23:25 · 1370 阅读 · 0 评论 -
一致性hash算法
package arithmetic;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.SortedMap;import java.util.TreeMap;/** * 一致性hash算法 * 类名称: ConsistentHash * 类描述: ...原创 2018-07-10 10:51:19 · 183 阅读 · 0 评论 -
AOP的实现机制
原文地址:http://www.iteye.com/topic/11166961 AOP各种的实现 AOP就是面向切面编程,我们可以从几个层面来实现AOP。 在编译器修改源代码,在运行期字节码加载前修改字节码或字节码加载后动态创建代理类的字节码,以下是各种实现机制的比较。 类别 机制 原理 ...转载 2018-07-17 08:48:18 · 381 阅读 · 0 评论 -
红黑树
/** From CLR 新增一个节点之后需要修正树的结构*/ private void fixAfterInsertion(Entry<K,V> x) { x.color = RED;//默认置成红色,这样做为了把问题简单化,可以考虑尽量少的情况 while (x != null && x != root &...原创 2018-07-18 09:57:25 · 179 阅读 · 0 评论 -
高性能队列——Disruptor
转载地址:https://tech.meituan.com/disruptor.html背景Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Martin...转载 2018-08-08 11:43:08 · 256 阅读 · 0 评论 -
Java之深入JVM(1) - 由i++ 和 ++i的执行速度所想到的
i++++i i-=-1i+=1 以上的四句代码,问那句的执行速度更快?对于C/C++程序员来说,可能首先想到的就是i++和++i要比其他两者要快一些,但是在Java中是不是这样的呢?我们可以对他进行一些分析,首先当然想到的是对这些语句利用Java的System.currentTimeMillis()计算单个语句运行很多次(如10亿次)后转载 2017-11-15 16:05:51 · 477 阅读 · 0 评论 -
Java基础-对象的内存分配与初始化
首先,什么是类的加载?类的加载由类加载器执行.该步骤将查找字节码(classpath指定目录),并从这些字节码中创建一个Class对象。java虚拟机为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。一旦某个类的Class对象被载入到内存,他就被用来创建这个类的所有对象。类的加载会发生在什么时候呢?所有的类都是在其第一次使用的时候,动态加载到JVM的。当转载 2017-11-15 11:17:08 · 372 阅读 · 0 评论 -
指令级并行,线程级并行,数据级并行区别
作者:Eureka912链接:https://www.zhihu.com/question/21823699/answer/111606716来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。进程(processes)与线程(thread) 我们先说个例子:小明的一天上午:洗脸刷牙,吃早饭,听音乐下午: 坐公交到公园玩,晚上:转载 2017-11-09 13:34:15 · 4885 阅读 · 1 评论 -
java内存泄露
首先谈下java的内存管理机制:在Java程序中,我们通常使用new为对象分配内存,而这些内存空间都在堆(Heap)上。public class Test { public static void main(String args[]){ Object object1 = new Object();//obj1 Object object转载 2017-10-24 11:16:08 · 229 阅读 · 0 评论 -
Java内存模型——JMM
深入理解Java内存模型(一)——基础并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来转载 2017-11-10 10:41:15 · 150 阅读 · 0 评论 -
深入JVM字节码执行引擎
我们都知道,在当前的Java中(1.0)之后,编译器讲源代码转成字节码,那么字节码如何被执行的呢?这就涉及到了JVM的字节码执行引擎,执行引擎负责具体的代码调用及执行过程。就目前而言,所有的执行引擎的基本一致:输入:字节码文件处理:字节码解析输出:执行结果。物理机的执行引擎是由硬件实现的,和物理机的执行过程不同的是虚拟机的执行引擎由于自己实现的。运行时候的栈结构每一个线程都转载 2017-11-11 08:56:17 · 148 阅读 · 0 评论 -
JVM之执行引擎(二)
运行时栈帧结构方法调用动态语言支持字节码解释执行引擎虚拟机是如何执行方法里面的字节码指令的基于栈的指令集和基于寄存器的指令集编译优化技术Javac编译过程分为哪些步骤即时编译器JIT热点代码优化技术类型代表性优化技术公共子表达式消除数组边界检查消除方法内联逃逸分析Java与CC编译器Execution Engine是虚拟机的核心组成之一转载 2017-11-11 10:07:13 · 231 阅读 · 0 评论 -
类的加载、连接与初始化过程的详细分析(上)
一、类加载阶段 1.类加载方式 类的加载指的是将类的.class文件的二进制数据读入内存中,将其放在运行时数据区的方法区内。然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构,该对象是由JVM在加载类时创建的。所以每个类都会对应一个Class类型的对象,通过getClass()来获取,并且无论生成该类的多个少对象,其转载 2017-11-12 11:05:02 · 264 阅读 · 0 评论 -
类的加载、连接与初始化过程的详细分析(中)
1.类的验证 类验证除了包装类的可用,还为了包装安全性,防止构件出自定义的类来侵入系统。 类验证所要完成的功能: Ø 类文件结构的检查 确保类文件遵从Java类文件的固定格式 Ø 语义检查 确保类本身符合Java语言的语法规定,比如验证final类型的类有无子类,以及转载 2017-11-12 11:21:57 · 244 阅读 · 0 评论 -
类的加载、连接与初始化过程的详细分析(下)
1.类的初始化时机 类连接阶段的解析步骤完成后就进入了类的初始化阶段,并且只有主动使用类时才会执行初始化。在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值(程序中使用赋值语句所赋予的值)。 在程序中,静态变量的初始化有两种途径: > 在静态变量的声明处进行初始化 > 在静态代码块中进行初始化,静态代转载 2017-11-12 11:29:50 · 251 阅读 · 0 评论 -
Java内存模型及性能优化
最近在做一个项目的性能优化,遇到好多以前没有关注过的性能问题,一头雾水,今天做个笔记,简单记录下JVM相关的参数设置。一、JVM内存模型首先介绍下Java程序具体执行的过程:Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀);由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行;在整个程序执行过程中,JVM转载 2017-10-17 13:55:18 · 208 阅读 · 0 评论 -
修改 tomcat 内存
在Jetty 的VM参数中设置: -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 在tomcat运行环境中设置: window环境 startup.bat第一行 SET CATALINA_OPTS= -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=2转载 2017-10-17 14:02:43 · 228 阅读 · 0 评论 -
Java内部类详解
说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。下面是本文的目录大纲: 一.内部类基础 二.深入理解内部类 三.内部类的使用场景和好处 四.常见的与内部类相关的笔试面试题 若有不正之处,请多谅解并欢迎批评指正。 请尊重作转载 2017-11-17 18:08:43 · 168 阅读 · 0 评论 -
java 彻底理解 byte char short int float long double
遇到过很多关于 数值类型范围的问题了,在这做一个总结,我们可以从多方面理解不同数值类型的所能表示的数值范围 在这里我们只谈论 java中的数值类型 首先说byte:这段是摘自jdk中 Byte.java中的源代码: [java] view plaincopy /** * A constant holding the minimum valu转载 2017-11-14 10:21:33 · 259 阅读 · 0 评论 -
Java之深入JVM(6) - 字节码执行引擎(转)
前面我们不止一次的提到,Java是一种跨平台的语言,为什么可以跨平台,因为我们编译的结果是中间代码—字节码,而不是机器码,那字节码在整个Java平台扮演着什么样的角色的呢?JDK1.2之前对应的结构图如下所示:从JDK1.2开始,迫于Java运行始终笔C++慢的压力,JVM的结构也慢慢发生了一些变化,JVM在某些场景下可以操作一定的硬件平台,一些核心的Java库甚至也可以操作底层的硬件平台转载 2017-11-14 11:36:05 · 274 阅读 · 0 评论 -
从Java代码到字节码(1)
理解Java代码是如何被编译为字节码并在Java虚拟机(JVM)上执行是非常重要的,这将帮助理解你的程序是如何执行的。这样的理解不仅仅能够让你在逻辑上更好的掌握语言特性,而且能够有机会理解在做出重要决定时所需的权衡以及相应的副作用。这篇文章解释了Java代码是如何被编译为字节码并在JVM上执行的,如果想要理解JVM的内部结构和以及字节码在运行过程中占用的不同的内存区域,请看我之前的深入JVM一转载 2017-11-14 17:21:16 · 320 阅读 · 0 评论 -
Java基础-方法区以及static的内存分配图
前面的几篇都没有太明确地指出 方法区 是什么?现在通过一些资料的收集和学习,下面做一些总结什么是方法区:方法区是系统分配的一个内存逻辑区域,是JVM在装载类文件时,用于存储类型信息的(类的描述信息)。方法区存放的信息包括:类的基本信息:1.每个类的全限定名2.每个类的直接超类的全限定名(可约束类型转换) 3.该类是类还是接口4.该类型的访问修饰符转载 2017-11-15 10:22:37 · 298 阅读 · 0 评论 -
深入理解wait/notify/notifyAll的作用
notify: 唤醒在监视器对象上等待的单个线程,此时调用该方法的代码继续执行。notifyAll: 唤醒在监视器对象上等待的所有线程,此时调用该方法的代码继续执行。第一、为什么会有wait/notify/notifyAll这几个方法?(1) wait/notify/notifyAll是为了避免轮询(尝试执行)带来的性能损失,这句话是什么意思?看下面的讲解:为了说清道理,我们用“图书馆借书...转载 2018-09-12 10:26:13 · 2369 阅读 · 3 评论