- 博客(30)
- 资源 (6)
- 问答 (5)
- 收藏
- 关注
原创 Java基础 - 图论的起源于发展
一、图论的起源图论是一个古老的但又十分活跃的数学学科,也是一门很有实用价值的学科,它在自然科学、社会科学等各领域均有很多应用。近年来它受计算机科学蓬勃发展的刺激,发展极其迅速。应用范围不断拓广,已渗透到诸如语言学、逻辑学、物理学、化学、电讯工程、计算机科学以及数学的其它分支中。1736年是图论的历史元年。这一年,欧拉(L•Euler)研究了哥尼斯堡城(Königsberg)的七桥问
2016-12-31 23:29:19 2980
转载 一图读懂JVM架构解析
每个Java开发人员都知道字节码经由JRE(Java运行时环境)执行。但他们或许不知道JRE其实是由Java虚拟机(JVM)实现,JVM分析字节码,解释并执行它。作为开发人员,了解JVM的架构是非常重要的,因为它使我们能够编写出更高效的代码。本文中,我们将深入了解Java中的JVM架构和JVM的各个组件。JVM虚拟机是物理机的软件实现。Java的设计理念是WORA(Write On
2016-12-31 23:11:56 3016 1
原创 Java基础 - 2-3树
定义和二叉树不一样,2-3树运行每个节点保存1个或者两个的值。对于普通的2节点(2-node),他保存1个key和左右两个自己点。对应3节点(3-node),保存两个Key,2-3查找树的定义如下:1. 要么为空,要么:2. 对于2节点,该节点保存一个key及对应value,以及两个指向左右节点的节点,左节点也是一个2-3节点,所有的值都比key有效,有节点也是一个2-3节
2016-12-30 15:43:49 1882
原创 JVM/HotSpot-Java对象头的HotSpot实现分析
java对象头的HotSpot实现分析HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充。对象头对象头包括两部分:Mark Word 和 类型指针。Mark WordMark Word用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,占用内存大小与虚拟机位长一
2016-12-29 14:10:57 1214
原创 JVM之-GC垃圾收集器(一)
JVM源码分析之堆内存的初始化前言Java堆是被所有线程共享的一块内存区域,所有对象和数组都在堆上进行内存分配。为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代、老年代和永久代(1.8中无永久代,使用metaspace实现)三块区域。堆初始化Java堆的初始化入口位于Universe::initialize_heap方法中,实现如下:其中U
2016-12-29 13:48:39 621
转载 JVM-由常量池 运行时常量池 String intern方法想到的(三)之String内存模型
由常量池 运行时常量池 String intern方法想到的(三)之String内存模型在这篇博文中描述的,所有在运行时常量池中出现的字符串其实都是一个String对象。因为,java是一种强类型的语言,要求每一种变量都要有具体的数据类型。但是基本数据类型存放的不是对象(String不属于基本数据类型)。基本数据类型的常量在运行时常量池中存放的是字面值。貌似JVM会自动将boolean、byt
2016-12-26 19:58:05 1441
原创 占小狼之-Java进阶之路-深入分析String.intern和String常量的实现原理
深入分析String.intern和String常量的实现原理背景字符串类型在实际应用场景中使用非常频繁,如果为每个字符串常量都生成一个对应的String对象,明显会造成内存的浪费,针对这一问题,虚拟机实现一个字符串常量池的概念,提供了如下实现:1、同一个字符串常量,在常量池只有一份副本;2、通过双引号声明的字符串,直接保存在常量池中;3、如果是String对象,可
2016-12-25 23:25:46 1021
转载 Unsupported major.minor version 51.0解决
Unsupported major.minor version 51.0解决环境:Eclipse-j2ee + JDK 1.6.0_45。问题:别人的项目使用的是JDK 1.7,而本机采用的是JDK 1.6,当引入工程(或者说是JDK由1.7变成了1.6),配置好JDK,运行程序时会报“Unsupported major.minor version 51.0”错误。解决:项目---
2016-12-25 23:14:34 474
原创 占小狼之-JVM-JVM源码分析之Java对象的创建过程
JVM源码分析之Java对象的创建过程接着上篇《JVM源码分析之Java类加载过程》,本文将基于HotSpot实现对Java对象的创建过程进行深入分析。定义两个简单的类AAA和BBB通过``javap -c AAA```查看编译之后的字节码,具体如下:Java中的new关键字对应jvm中的new指令,定义在InterpreterRunti
2016-12-25 20:32:14 1520
原创 占小狼之-JVM-JVM源码分析之Java类加载过程
JVM源码分析之Java类加载过程背景最近对Java细节的底层实现比较感兴趣,如Java类文件是如何加载到虚拟机的,类对象和方法是以什么数据结构存在于虚拟机中?虚方法、实例方法和静态方法是如何调用的?本文基于openjdk-7的OpenJDK实现Java类在HotSpot的内部实现进行分析。HotSpot内存划分在HotSpot实现中,内存被划分成Java堆、方法区
2016-12-25 20:25:14 1679
原创 占小狼之-JVM-JVM内存的那些事
JVM内存的那些事前言对于C语言开发的程序员来说,在内存管理方面,必须负责每一个对象的生命周期,从有到无。对于Java程序员你来说,在虚拟机内存管理的帮助下,不需要为每个new对象都匹配free操作,内存泄露和内存溢出等问题也不太容易出现,不过也正是因为把内存管理交给了虚拟机,一旦运行中的程序出现了内存泄露问题,给排查过程造成很大困难。所以只有理解了Java虚拟机的运行机制,才
2016-12-25 20:09:23 1854
原创 江南白衣之-Java性能优化-高性能场景下,Map家族的优化使用建议
高性能场景下,Map家族的优化使用建议。1. HashMap 在JDK 7 与 JDK8 下的差别顺便理一下HashMap.get(Object key)的几个关键步骤,作为后面讨论的基础。1.1 获取key的HashCode并二次加工因为对原Key的hashCode质量没信心,怕会存在大量冲突,HashMap进行了二次加工。JDK7的做法: h ^
2016-12-23 20:41:43 2199
原创 江南白衣之-Java进阶-StringBuffer在高性能场景下的正确用法
StringBuilder在高性能场景下的正确用法。关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuilder,不要用+,也不要用StringBuffer,然后性能就是最好的了,真的吗吗吗吗?还有些同学,还听过三句似是而非的经验:1. Java编译优化后+和StringBuilder的效果一样;2. StringBuilder
2016-12-23 20:21:29 1404
原创 占小狼-Java进阶之路-浅谈StringBuffer
浅谈StringBuilder连接符号 "+" 本质在 浅谈Java String内幕(1) 中,字符串变量(非final修饰)通过 "+" 进行拼接,在编译过程中会转化为StringBuilder对象的append操作,注意是编译过程,而不是在JVM中。public class StringTest { public static void main(Stri
2016-12-23 19:56:20 1137
原创 占小狼-Java进阶之路-浅谈Java String内幕(二)
浅谈Java String内幕(2)String.intern()原理String.intern()是一个Native方法,底层调用C++的 StringTable::intern 方法,源码注释:当调用 intern 方法时,如果常量池中已经该字符串,则返回池中的字符串;否则将此字符串添加到常量池中,并返回字符串的引用。package com.ctrip.ttd.
2016-12-23 19:44:40 669
原创 占小狼-Java进阶之路-浅谈Java String内幕(一)
浅谈Java String内幕:前言String字符串在Java应用中使用非常频繁,只有理解了它在虚拟机中的实现机制,才能写出健壮的应用,本文使用的JDK版本为1.8.0_3。常量池Java代码被编译成class文件时,会生成一个常量池(Constant pool)的数据结构,用以保存字面常量和符号引用(类名、方法名、接口名和字段名等)。package com.
2016-12-23 19:27:09 707
转载 Java基础 - 字典树(Trie树)
本文转载由http://blog.csdn.net/jiutianhe/article/details/8076835提供1. Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率
2016-12-23 11:06:01 3795
原创 Java基础 - 跳表(SkipList)
跳表(skiplist)是一个非常优秀的数据结构,实现简单,插入、删除、查找的复杂度均为O(logN)。LevelDB的核心数据结构是用跳表实现的,redis的sorted set数据结构也是有跳表实现的。跳表同时是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的。下面来研究一下跳表的核心思想:
2016-12-22 01:52:24 961
原创 Java基础 - 树状数组Java版
下面的文字说明引用了 int64Ago 的一篇博文。 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结。第一个接触树状数组还是两年前,用什么语言来形容当时的感觉呢?……太神奇了!真的,无法表达出那种感觉,她是那么的优雅,10行不到的代码,却把事情干的如此出色!没有了解她原理的前提下即使把代码倒背如流也理解不了!其中,我就是一直没搞懂地在使用她。时隔两年,又无意遇到了
2016-12-19 17:00:47 2416
原创 JAVA性能优化全攻略
Java性能优化全攻略2016-12-14 22:53程序员之家部落让Java应用程序运行是一回事,但让他们跑得快就是另外一回事了。在面对对象的环境中,性能问题就像来势凶猛的野兽。但JVM的复杂性将性能调整的复杂程度增加了一个级别。这里Refcard涵盖了JVM internals、class loading(Java8中更新以映射最新的元空间)、垃圾回收、故障诊断、检测、并发性,等等
2016-12-17 13:42:36 616
原创 Java中关于String类型的10个问题
Java中关于String类型的10个问题2016-12-16 14:50程序员之家部落1. 如何比较两个字符串?用“=”还是equals简单来说,“==”是用来检测俩引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等。只要你项检测俩字符串是不是相等的,你就必须得用equals()方法。如果你知道“字符串保留(string inter
2016-12-17 11:45:13 436
转载 Java基础 - 线段树C/C++版(Segment Tree)三
本文转载自JustDoIt 的一片博文,下面是链接地址:http://www.cnblogs.com/TenosDoIt/p/3453089.html一 概述线段树,类似区间树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(logn)。线段树的每个节点表示一个区间,子
2016-12-14 21:42:38 530
转载 Java基础 - 线段树C/C++版(Segment Tree)二
本文转载自懂的微博,下面是转载地址:http://dongxicheng.org/structure/segment-tree/1、概述线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。2、线段树基本操作线段树的基本操作主要包括构造线段树,区间查
2016-12-14 20:37:04 571
转载 Java基础 - 线段树C/C++版(Segment Tree)一
本文转自NULL00大神的一篇文章,下面是原文地址:http://www.cnblogs.com/shuaiwhu/archive/2012/04/22/2464583.html下图是一棵线段树:1.线段树基本性质和操作线段树是一棵二叉树,记为T(a, b),参数a,b表示区间[a,b],其中b-a称为区间的长度,记为L。线段树T(a,b)也
2016-12-14 19:51:07 423
原创 Java基础 - 替罪羊树(Scapegoat Tree)
package com.yc.tree;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Deque;import java.util.List;/** * @author wb * @param * * 替罪羊树的定义: * 1.是一种二叉排序树 * 2.根节点存储了树的节
2016-12-12 17:02:18 2399 1
原创 Java基础 - 节点自平衡树(Size Balanced Tree,简称SBT)
package com.yc.tree;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Deque;import java.util.List;public class SizeBalancedTree >{ public class Node{ //data域:存放数据项 T
2016-12-09 16:08:59 1364 1
原创 Java基础 - 伸展树(SplayTree)
伸展树的基本操作有:1.查询2.添加3.删除4.树的最大节点5.树的最小节点6.节点的前驱7.节点的后继8.合并9.分离下面是我完成的部分功能代码(除节点的后继,大家可以仿照求节点的前驱的方法来求后继,很简单):package com.yc.tree;import java.util.ArrayDeque;import java.util.Arra
2016-12-05 20:54:39 1975
原创 Java基础 - 树堆(Treap = tree+heap)
一棵treap是一棵修改了结点顺序的二叉查找树,如图,显示一个例子,通常树内的每个结点x都有一个关键字值key[x],另外,还要为结点分配priority[x],它是一个独立选取的随机数。
2016-12-04 00:43:27 2603 4
原创 Java基础 - 平衡二叉查找树(AVL树)
平衡二叉查找树(height balanced binary search tree)在1962年由Adelson-Velskii和Landis提出,因此又称为AVL树。AVL树定义为:一棵空树是平衡二叉查找树;假设T不是空的树,TL和TR分别是此 二叉树的左子树和右子树,如符合下列两个条件,则称T为平衡二叉查找树:(1)TL和TR亦是平衡二叉查找树;(2) |hL - hR| <= 1,其中hL和hR分别是TL和TR的高度。
2016-12-01 21:58:15 906
emacs-25-x86_64-deps.zip
2018-06-20
win64_ssl_curl 插件
2018-03-16
windows系统换linux系统硬盘少了100G,现在怎么搞
2019-01-13
springboot配置thymeleaf
2018-08-06
会MYSQL来,数据库大神诉进
2017-09-28
Linux系统进入界面失败
2017-04-06
2-3树是B树的特例吗?
2016-12-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人