空间数据

【搞定Jvm面试】 Java 内存区域揭秘附常见面试题解析

烂漫一生 提交于 2019-12-15 14:23:17
本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb (【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错的还,不妨去点个Star,鼓励一下! Java 内存区域详解 如果没有特殊说明,都是针对的是 HotSpot 虚拟机。 写在前面 (常见面试题) 基本问题 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题 String 类和常量池 8 种基本类型的包装类和常量池 一 概述 对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像 C/C 程序开发程序员这样为每一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。 二 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK. 1.8 和之前的版本略有不同,下面会介绍到。 JDK 1.8 之前: JDK 1.8 : 线程私有的:

PixelNet: Representation of the pixels, by the pixels, and for the pixels----2017论文翻译解读

淺唱寂寞╮ 提交于 2019-12-15 04:38:42
PixelNet: Representation of the pixels, by the pixels, and for the pixels. 图1.我们的框架通过对架构(最后一层)和训练过程(历元)的微小修改,将其应用于三个不同的像素预测问题。 请注意,我们的方法为分割(左),表面法线估计(中)和边缘检测(右)的语义边界恢复精细的细节。 Abstract 我们探索了一般像素级预测问题的设计原理,从低级边缘检测到中级表面法线估计到高级语义分割。诸如全卷积网络(FCN)之类的卷积预测因子通过通过卷积处理利用相邻像素的空间冗余而获得了非凡的成功。尽管计算效率高,但我们指出,由于 空间冗余限制了从相邻像素学习的信息 ,因此这些方法在学习过程中在统计上并不是有效的。 我们证明了像素的分层采样可以使(1)在批量更新过程中增加多样性,从而加快学习速度; (2)探索复杂的非线性预测因子,提高准确性; (3)有效地训练最先进的模型tabula rasa(即“从头开始”)以完成各种像素标记任务。 我们的单一体系结构可为PASCAL-Context数据集上的语义分割,NYUDv2深度数据集上的表面法线估计以及BSDS上的边缘检测提供最新结果。 1.Introduction 许多计算机视觉问题可以表述为密集的逐像素预测问题。 其中包括边缘检测[21、64、94]和光流[5、30、86]等低级任务

R-tree总结

左心房为你撑大大i 提交于 2019-12-14 09:09:30
R-tree   R-tree是用来做空间数据存储的树状数据结构。R-tree是B-tree向多维空间发展的另一种形式,并且R树也是平衡树。   R树的核心思想是聚合距离相近的节点并在树结构的上一层将其表示为这些节点的最小外接矩形,这个最小外接矩形就成为上一层的一个节点。因为所有节点都在它们的最小外接矩形中,所以跟某个矩形不相交的查询就一定跟这个矩形中的所有节点都不相交。叶子节点上的每个矩形都代表一个对象,节点都是对象的聚合,并且越往上层聚合的对象就越多。   R树的主要难点在于构建一棵既能保持平衡(所有叶子节点在同一层),又能让树上的矩形既不包括太多空白区域也不过多相交(这样在搜索的时候可以处理尽量少的子树)的高效的树。 1 R-tree数据结构   通常,我们不选择去索引几何物体本身,而是采用最小限定箱 MBB(minimum bounding box) 作为不规则几何图形的 key 来构建空间索引。在二维空间中,我们称之为最小边界矩形MBR(minimum bounding retangle)。叶子节点(leaf node)则存储每个对象需要的数据,一般是一个外接矩形和指向数据的标识符(Index,Obj_ID)。如果是点数据,叶子节点只需要存储这些点本身。如果是多边形数据,一般的做法是在叶子节点中存储多边形的最小外接矩形和指向这个多边形的数据的唯一标识符。而非叶子节点

【Linux】malloc 与共享内存原理区别

戏子无情 提交于 2019-12-14 01:15:06
本文主要分析内存以及I/O相关的系统调用和库函数的实现原理,根据原理给出在使用过程中需要注意的问题和优化的侧重点,本文涉及到的系统调用包括readahead,pread/pwrite,read/write,mmap,readv/writev,sendfile,fsync/fdatasync/msync,shmget,malloc。 本文先简单介绍应用程序对内存的使用以及I/O系统对内存的使用的基本原理,这对理解上述系统调用和库函数的实现有很大帮助。 1 内存管理基础 Linux对物理内存的管理是以页为单位的,通常页大小为4KB,Linux在初始化时为所有物理内存也分配了管理数据结构,管理所有物理页面。 每一个应用程序有独立的地址空间,当然这个地址是虚拟的,通过应用程序的页表可以把虚拟地址转化为实际的物理地址进行操作,虽然系统可以实现从虚拟地址到物理地址的转换,但并非应用程序的每一块虚拟内存都对应一块物理内存。Linux使用一种按需分配的策略为应用程序分配物理内存,这种按需分配是使用缺页异常实现的。比如一个应用程序动态分配了10MB的内存,这些内存在分配时只是在应用程序的虚拟内存区域管理结构中表示这一区间的地址已经被占用,内核此时并没有为之分配物理内存,而是在应用程序使用(读写)该内存区时,发现该内存地址对应得物理内存并不存在,此时产生缺页异常

JVM的内存区域划分(jdk7和jdk8)

丶灬走出姿态 提交于 2019-12-13 19:59:15
前言 1、什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 2、JRE/JDK/JVM是什么关系 JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java 程序都要在JRE下才能运行。普通用户只需要运行已开发好的java程序,安装JRE即可。 JDK(Java Development Kit)是程序开发者用来来编译、调试java程序用的开发工具包。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是 安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。 JVM(JavaVirtualMachine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。 3、JVM执行程序的过程

SQL server的字段类型详解

泪湿孤枕 提交于 2019-12-12 18:02:34
SQL server的字段类型详解 bit 整型 bit数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或No、True 或False 、On 或Off. 注意:很省空间的一种数据类型,如果能够满足需求应该尽量多用。 tinyint 整型 tinyint 数据类型能存储从0到255 之间的整数。它在你只打算存储有限数目的数值时很有用。这种数据类型在数据库中占用1 个字节. 注意:如果bit类型太单调不能满足您的需求,您可以考虑用tinyint类型,因为这个类型相对也是比较安全的,不接受恶意脚本内容的嵌入。 smallint 整型 smallint 数据类型可以存储从- 2的15次幂(-32768)到2的15次幂(32767)之间的整数。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。这种数据类型在数据库里占用2 字节空间. 注意:如果tinyint类型太单调不能满足您的需求,您可以考虑用smallint类型,因为这个类型相对也是比较安全的,不接受恶意脚本内容的嵌入。 int 整型 int 数据类型可以存储从- 2的31次幂(-2147483648)到2的31次幂 (2147483 647)之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4个字节. 注意

行业大秀:EasyEarth Show!

自作多情 提交于 2019-12-12 12:14:32
EasyEarth三维可视化地理信息云平台是由北京四维益友信息技术有限公司自主研发的新一代面向三维可视化应用领域的基础信息系统平台。 EasyEarth以数据管理为核心,围绕7大类基础数据,提供综合管理服务。平台充分融合互联网、物联网与移动端,让各种媒介与平台互联互通;数据管理涵盖本地化和共享数据,采用高性能数据库管理技术配合分发调度机制,实现数据高效化管理与分发应用,并为上层提供高效基础空间分析服务;强大的三维实时渲染引擎,便捷、高效的数据调度机制,为数据应用提供各种高级渲染。 用户可以轻松进行数据管理、场景浏览、查询定位、模型编辑、空间量测、场景标绘等操作,并实时查看网络数据、实体属性、空间特效,实现通视分析、地形剖面分析、水淹分析、缓冲区分析、搜索分析等各类功能。 EasyEarth有完善的产品架构。用户可将基础数据导入Builder,交互式创建、编辑和发布地理空间场景,通过Server将各类服务稳定、高效地分发给用户。 目标人群可使用EasyEarth Desktop、EasyEarth Explore、EasyEarth移动版等客户端,实现地理空间场景的三维浏览、查询、量算、分析等功能。另外,平台还具有完整灵活的SDK二次开发包,可根据用户需求量身打造专属应用系统,提供定制化解决方案。 EasyEarth秉承着成为空间地理信息技术集成专家的理念,专一、专注

oracle服务器硬盘磁盘空间满了

让人想犯罪 __ 提交于 2019-12-11 17:06:02
问题描述:oracle服务器硬盘磁盘空间满了,没有空间写入数据; 解决思路: a、服务器是虚拟机还是实体机? 虚拟机,->物理机上有空间直接给它扩容,再给数据库的相关表空间添加文件就可; 实体机,->确定是否还有oracle收缩磁盘硬盘插槽,能新增物理硬盘,买+接入; b、删数据以及降低高水位; 通常思路是:找占用磁盘最大的表空间TS_1,找该表空间下巨大的表tableA,删除历史数据,降低高水位(table move),缩小表空间文件,腾出空间; 1、查询 表空间各文件 --找出占用磁盘最大的表空间 --1.1、查询 表空间、以及大小 --找出占用磁盘最大的表空间 SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.tablespace_name GROUP BY t.tablespace_name order by ts_size desc; --1.2、按数据库文件查看使用情况 select /*+ ordered use_hash(a,b,c) */ a.file_id,a.file_name,a.filesize, b.freesize, (a

Linux下C程序进程地址空间布局

时光毁灭记忆、已成空白 提交于 2019-12-10 14:47:36
我们在学习C程序开发时经常会遇到一些概念:代码段、数据段、BSS段(Block Started by Symbol) 、堆(heap)和栈(stack)。先看一张教材上的示意图(来源,《UNIX环境高级编程》一书),显示了进程地址空间中典型的存储区域分配情况。 从图中可以看出: 从低地址到高地址分别为:代码段、(初始化)数据段、(未初始化)数据段(BSS)、堆、栈、命令行参数和环境变量 堆向高内存地址生长 栈向低内存地址生长 还经常看到下面这个图(来源,不详): 先看一段程序。 [cpp] view plain copy #include <stdio.h> #include <stdlib.h> int global_init_a=1; int global_uninit_a; static int static_global_init_a=1; static int static_global_uninit_a; const int const_global_a=1; int global_init_b=1; int global_uninit_b; static int static_global_init_b=1; static int static_global_uninit_b; const int const_global_b=1; /*上面全部为全局变量

零拷贝 zero-copy 原理

点点圈 提交于 2019-12-10 13:11:18
引言 传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘 I/O 操作。但是数据传输过程中的数据拷贝操作却导致了极大的 CPU 开销,限制了操作系统有效进行数据传输操作的能力。 零拷贝( zero-copy )技术可以有效地改善数据传输的性能,在内核驱动程序(比如网络堆栈或者磁盘存储驱动程序)处理 I/O 数据的时候,零拷贝技术可以在某种程度上减少甚至完全避免不必要 CPU 数据拷贝操作。 什么是零拷贝? 零拷贝就是一种避免 CPU 将数据从一块存储拷贝到另外一块存储的技术。针对操作系统中的设备驱动程序、文件系统以及网络协议堆栈而出现的各种零拷贝技术极大地提升了特定应用程序的性能,并且使得这些应用程序可以更加有效地利用系统资源。这种性能的提升就是通过在数据拷贝进行的同时,允许 CPU 执行其他的任务来实现的。 零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率。而且,零拷贝技术减少了用户应用程序地址空间和操作系统内核地址空间之间因为上下文切换而带来的开销