自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小熊的菜地

技术可以改变世界

  • 博客(16)
  • 收藏
  • 关注

原创 Java内存分配策略

上一篇博文讲述了Java内存回收策略,这一次我们讲述一下Java内存分配策略。 这里我们先假设一个模型,我们假设:新生代总内存是10MB,其中Eden区与Survivor区的内存占比是8:1,也就是Eden区是8MB,而Survivor区是1MB;老年代总内存也设为10MB; 分配原则是: 1.优先分配在Eden区 也就是说大多数情况下,对象在Eden区中分配。 这里有一个问题是,如果我...

2018-09-12 10:03:24 612

原创 垃圾收集算法

1.标记-清除算法 最基础的收集算法是“标记-清除”算法,如同它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收说有被标记的对象。 它的主要不足有两个: 一个是效率问题,标记清除两个过程的效率都不高; 另一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大的对象时,无法找到足够的连续...

2018-09-10 09:44:25 85

原创 一个Java对象生存还是死亡?

第一个问题,如何判断一个对象已死? 一个对象已死,从程序运行的角度来看,当一个对象没有用的时候,这个对象就已经死了,那么,如何判断一个对象没有用了? 常用的方法是这样的:给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不再使用的。这就是引用计数算法。 引用计数算法是一个简单有效的算法,但是在Java中却没有使用这种...

2018-09-06 10:46:45 192

原创 对象的创建过程

在虚拟中,对象的创建过程是怎么样的?大体上来说分为三步: 1.类加载过程 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经执行过相应的类加载过程。 类加载过程大致有三个过程:加载、解析和初始化。2.为对象分配内存 分配方式有两种: 1.指针碰撞 这里需要Java堆的内存绝对规整,所有用过的内存都放...

2018-09-05 10:07:36 696

原创 Java内存区域

Java虚拟机在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域。 从线程的角度来看,运行时的数据区域主要分为两部分,第一部分是线程隔离的数据区,第二部分是线程共享的数据区。线程隔离的数据区分为三部分,下来我们一一介绍: 1.程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器,每条线程都有一个独立的程序计数器。 字节码解释器...

2018-09-04 09:49:03 58

原创 插入排序

算法 是否为原地排序 时间复杂度 空间复杂度 插入排序 是 介于N和N2之间 1public class InsertionSort { public static void main(String[] args) { int[] array = {5,4,3,2,1}; for (int i...

2018-08-28 16:14:29 94

原创 选择排序

算法 是否稳定 时间复杂度 空间复杂度 选择排序 是 N2 1public class SelectionSort { public static void main(String[] args) { int[] array = {5,4,3,2,1}; for (int i = 0;i <...

2018-08-28 16:08:51 76

原创 BinarySearch

二分查找: 平均时间复杂度:logN 最坏时间复杂度:logNimport java.util.Arrays;public class BinarySearch { public static void main(String[] args) { int[] array = {2,2,2,2,4}; Arrays.sort(array...

2018-08-27 16:31:04 133

转载 1126. Merge Two Binary Trees

Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.You need to merge them into a new binary tree...

2018-08-26 11:10:27 72

转载 1478. 最接近target的值

给出一个数组,在数组中找到两个数,使得它们的和最接近目标值但不超过目标值,返回它们的和描述 给出一个数组,在数组中找到两个数,使得它们的和最接近目标值但不超过目标值,返回它们的和如果没有满足要求的结果就返回 -1.Input:target = 15 array = [1,3,5,11,7] Output:14先排序,然后start 和 end 相加得到number 如果这个...

2018-08-26 10:02:03 849

转载 236.交换奇偶二进制位

题目描述 请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)给定一个int x,请返回交换后的数int。测试样例: 10 返回:5 解题思路:(1)先操作奇数位,把101010(即0xAA)作为掩码,提取奇数位,并右移1位到偶数位置(2)操作偶数位,把010101(即0x5555)作为掩码,提取偶数位,并左移一位到奇数位置(3)将两次操作结果合并成一个...

2018-08-24 16:53:33 241

转载 2. 尾部的零

描述 设计一个算法,计算出n阶乘中尾部零的个数。样例 11! = 39916800,因此应该返回 2挑战 O(logN)的时间复杂度分析 假如你把1 × 2 ×3× 4 ×……×N中每一个因数分解质因数,结果就像: 1 × 2 × 3 × (2 × 2) × 5 × (2 × 3) × 7 × (2 × 2 ×2) ×…… 10进制数结尾的每一个0都表示有一个因数10存在——任...

2018-08-24 16:38:14 111

原创 423. 有效的括号序列

描述 给定一个字符串所表示的括号序列,包含以下字符: ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, 判定是否是有效的括号序列。样例 括号必须依照 “()” 顺序表示, “()[]{}” 是有效的括号,但 “([)]”则是无效的括号。挑战 O(n)的时间,n为括号的个数public static boolean isValidParentheses(Stri...

2018-08-24 16:22:01 301

原创 823. 输入流

描述 给出两个输入流inputA和inputB,有Backspace,如果两个输入流最后的结果相等,输出YES,否则输出NO。样例 给出 inputA = “abcde<<”, inputB = “abcdpublic class Solution { /** * @param inputA: Input stream A * @param in...

2018-08-24 15:43:06 153

原创 Hamming距离

两个整数的Hamming距离是对应比特位不同的个数。 给定两个整数x和y,计算两者的Hamming距离样例 输入: x = 1, y = 4输出: 2public class Solution { public int hammingDistance(int x, int y) { int Distance=0; while ( x !...

2018-08-23 16:54:41 611

原创 769. 螺旋矩阵

描述:给出整数 n, 返回一个大小为 n * n 的螺旋矩阵给出 n = 3则螺旋矩阵为:[ [1,2,3],[8,9,4],[7,6,5] ]public class Solution { /** * @param n: a Integer * @return: a spiral array */ public int[][] spi...

2018-08-23 16:23:44 229

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除