自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

超频化石鱼的博客

愿终将不负时光

  • 博客(110)
  • 资源 (9)
  • 收藏
  • 关注

原创 垃圾收集器

针对于具体的情况,JVM使用不同的垃圾收集器。按照不同分代,HotSpot使用了七种垃圾收集器:①   新生代:Serial,ParNew,Parallel Scavenge②   老年代:CMS,Serial Old(MSC),Parallel Old③   通用:G1 如图。连线表示可搭配使用。1.    Serial收集器Serial...

2018-02-27 15:44:02 155

原创 垃圾回收时的安全点与安全区

      垃圾回收时,首先要枚举所有GC Roots节点。然而枚举GC Roots节点是需要停顿执行系统的。执行系统的停顿不可以过久,否则会影响整个系统的执行。为了能快速计算出对象内什么偏移量上是什么类型的数据,从而迅速完成枚举,HotSpot使用OopMap。OopMap是个Map,记录了所有必要信息的具体地址。      然而,OopMap是需要空间的。若每一条指令都创建一个对应的OopMa...

2018-02-27 15:42:57 514

原创 垃圾回收算法

1.    标记-清除算法首先标记出所有需要回收的对象,标记完成后统一回收所有标记对象。该算法是最基础的回收算法。主要问题是:标记和清除的效率不高;标记清除后会产生大量不连续内存碎片,以至于程序要分配大内存时无法找到足够的连续内存,从而不得不提前触发下一次垃圾清理。2.    复制算法将内存划分为容量相等的两块。每次只使用一块。当内存1用完时,就把所有活着的对象顺序复制到内存2上,然后对内存1进行...

2018-02-27 15:42:23 169

原创 常量池垃圾回收:判断类的存活

方法区中的常量池也需要进行垃圾回收。主要回收对象是废弃的常量和无用的类。其中,判断类的存活需要同时满足以下3个条件:1.    该类所有的实例已经被回收,即Java堆中已经不存在任何该类的实例。2.    加载该类的ClassLoader已经被回收。3.    该类对应的java.lang.Class对象没有在任何地方被引用,即无法在任何地方通过反射访问该类的方法。同时满足这3个条件的类,就是可回...

2018-02-27 15:41:34 1011

原创 判断对象存活:可达性分析算法

判断对象存活,常用的方式是引用计数器:每当对象被一个地方引用,计数器便+1;当引用失效时,计数器-1。当对象的计数器为0时,该对象便是一个不被使用的对象,即“死亡”。引用计数器实现简单,效率高。然而难以解决对象之间相互循环引用的问题(两个失效对象相互保存了对方的指针)。故JVM判定对象是否存活,并没有使用引用计数器,而是使用可达性分析算法。可达性分析算法即:有一系列“GCRoots”起点,从这些点...

2018-02-27 15:40:53 1200

原创 对象的访问定位

Java栈的本地变量表中,存储着一个reference数据,其中存储着一个引用。reference就是用来操作堆上的具体对象的。而一个引用如何定位和访问堆中对象的具体位置,有两种方式:句柄和直接指针。1.    句柄Java堆中划分一块内存作为句柄池。reference存储了对象的句柄地址。而句柄中就包含了对象实例数据等具体的地址信息。当对象被移动时,只会修改句柄中的实例数据指针。referenc...

2018-02-26 08:45:56 240

原创 JVM对象内存布局

HotSpot虚拟机中,对象在内存中的存储布局分3部分:对象头,实例数据,对齐填充。一.     对象头对象头包含两部分信息:对象的运行时数据和类型指针。1.    对象的运行时数据对象的运行时数据非常多,主要有哈希码,GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳等。①   哈希码:对象的标识。②   GC分代年龄:GC即Java的垃圾回收机制。Java堆分两部分:新生代堆和老...

2018-02-26 08:45:23 320

原创 Java对象创建过程

1.    用户new一个对象。2.    JVM检查常量池,看是否可定位到一个类(所对应的符号引用),并检查该类是否已经加载,解析和初始化。若没有,则执行类加载过程。3.    类加载检查通过,JVM为新对象分配内存。由于类已经加载完成,所以内存大小是可以确定的。分配过程就是从Java堆中划分一块内存出来。JVM维护了一个空闲内存列表,记录了所有可用的内存块。分配时划分一块足够大的内存出来。这称...

2018-02-26 08:44:34 260

原创 Java堆,方法区,直接内存

Java的内存区中,为线程共有的有三部分:Java堆,方法区,直接内存。其中方法区中包含运行时常量池。直接内存并不属于Java的常规内存区。1.    Java堆是被所有线程共享的一块内存,在启动虚拟机时创建。通常,所有的对象实例及数组都要在堆上分配。但并不绝对。2.    Java堆可扩展。其内存在物理上可以不连续。当Java堆无法再扩展时,将抛出内存不足异常。3.    Java的垃圾收集器主...

2018-02-26 08:44:01 394

原创 程序计数器,虚拟机栈和本地方法栈

Java的内存区中,为线程私有的有三部分:程序计数器,虚拟机栈,本地方法栈。1.    Java虚拟机的程序计数器用于指定程序所执行字节码的行号。2.    Java的多线程是用时间片轮转的方式实现的。每个线程都有自己的程序计数器,称之为线程私有,用于轮转到自己时从上次执行位置继续执行。3.    每个线程执行时,都会创建一个栈,称为虚拟机栈。而每个方法在执行时,需要存储变量表,操作数,动态链接和...

2018-02-26 08:42:46 1211

原创 SVG的viewBox与放缩

SVG的viewBox用于划定可视区域的大小。要对SVG对象进行缩放,必须设定viewBox的大小,通常设为与SVG对象大小相同。设定viewBox大小后,再设置svgDoc的大小,即可对SVG的显示进行整体放缩。...

2018-02-24 16:18:29 4012

原创 OpenGL加速渲染:顶点数组的索引模式

         使用顶点数组时,往往要将所有需要使用的顶点放入数组中,以便于统一调用。         比如一条折线:GLfloat vPoints[] = { 0.0, 0.0, 0.0, //折线端点0 1.0, 0.0, 0.0, //折线端点1 1.0, 0.0, 0.0, //折线端点1 1.0, 1.0, 0.0 //折线端点2};    ...

2018-02-10 08:26:30 1786

原创 OpenGL加速渲染:顶点数组

         加速渲染主要有两种方法:显示列表与顶点数组。         其中,显示列表是通过预编译方式加速,而顶点数组是通过优化实时编译方式加速。但是,不需要同时使用两种加速方式。如果把顶点数组放在预编译中,然后通过显示列表来显示,这样做所耗时间与直接使用顶点数组所耗时间基本相同。         使用顶点数组,也就是把所有点存储在一个数组中,然后将该数组的地址属性通知给OpenGL,然后...

2018-02-10 08:26:28 1519

原创 OpenGL自定义相机与模型:GLFrame

GLFrame叫参考帧,其中存储了1个世界坐标点和2个世界坐标下的方向向量,也就是9个glFloat值,分别用来表示:当前位置点,向前方向向量,向上方向向量。GLFrame可以表示世界坐标系中任意物体的位置与方向。无论是相机还是模型,都可以使用GLFrame来表示。对任意一个使用GLFrame来表示的物体而言,涉及到的坐标系有两个:永远不变的世界坐标系,针对于自身的物体坐标系(即绘图坐标系)。...

2018-02-10 08:26:26 2611 3

原创 OpenGL视图变换及gluLookAt

视图变换,即相机变换,其作用是把相机放在指定位置并使其对准场景。该变换是针对相机的变换,不会影响到模型。视图变换决定了相机的位置与方向,因此可以通过视图变换来改变相机位置与方向,从而达到从各个不同的位置与角度来观察同一个物体的情形。进行视图变换使用的函数为:void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdoub...

2018-02-10 08:26:23 1726

原创 OpenGL物体显示被截断:视景体与相机的运动与作用

         OpenGL中,成功显示了一个图形,然后图形不动,仅仅移动照相机,将照相机拉远,渐渐地会发现图形开始被某个平面截断了,显示不全。         相应地,如果照相机不动,移动物体,随着物体朝某个方向一直持续移动,会发现物体也开始被某个平面截断。这种情况很好解释,这是因为物体平移出了视景体区域,视景体的边界就会把物体截断。虽然视景体没有移动,但是物体移动了。         实际上...

2018-02-10 08:26:21 1978

原创 OpenGL投影变换:视景体及glFrustum、gluPerspective 与glOrtho、gluOrtho2D

一.            视景体视景体是指成像景物所在空间的集合。它是一个空间集合体。         注意视景体指的是一个空间集合。一般来说,集合中的每个空间都是个立方体。然后所有的这些空间堆在一起,在外侧取一个最大的外接立方体,就是可显示的区域,该可显示区域也是一个视景体。在这个可显示区域内,放置着可以显示的物体。注意,可以显示的物体仅仅是拥有显示权限,但是不一定显示,这取决于相机等其他因素...

2018-02-10 08:26:18 4721

原创 OpenGL目标场景产生的变换过程

         一般而言,OpenGL目标场景产生的变换过程分为5步:①  将未安装镜头的相机固定在指定位置上,并调整好镜头的朝向(视图变换)②  对场景进行安排,将各个物体摆放在指定位置(模型变换)③  选择照相机镜头并安装,同时整放大倍数,使得3D场景可以在照相机的CCD上形成一个清晰的平面图像(投影变换)④  确定最终照片的大小。(视口变换)⑤  进行拍照。(绘制场景)         如...

2018-02-10 08:26:16 448

原创 对话框未显示时GetWindowRect()获取坐标左上角为0

GetWindowRect()函数得到的是相对应于屏幕左上角的坐标。但是若在对话框的OnInitDialog()函数中使用RECT parentWindow;this->GetWindowRect(&parentWindow);得到的左上角却是(0,0);其原因是:对话框在执行OnInitDialog()的时候还没有显示,这时候对话框的左上角与屏幕左上角是重合的。所以该操作得到的区...

2018-02-09 15:34:20 828

原创 MFC异形对话框

基本原理:获取窗体区域,指定一个颜色为透明色,遍历位图,将图上所有该色区域从窗体区域中去除。这样最后就得到了一个异形窗体。然后把背景图绘制在该窗体上。注意绘制的时候,作为透明的部分依然会被以原色绘制。但是由于绘制的地方并没有窗体,故而是显示不出来的。 在对话框的OnInitDialog()函数中加入以下代码:CDC* pDC = GetDC();//获得设备上下文CDC memDC;CBitm...

2018-02-09 15:34:17 621

原创 控件截获主对话框WM_KEYDOWN消息后按键所发出的警告音

自定义了一个控件类,为了能让控件响应快捷键,需要重载父对话框的WM_KEYDOWN消息,将消息截获,并发送给控件。如:BOOL COpenGLDemoDlg::PreTranslateMessage(MSG* pMsg){ // TODO: Add your specialized code here and/or call the base class if (pMsg->messa...

2018-02-09 15:34:14 397

原创 SVG对象:延迟获取

引入一个SVG文件:<embed id="mySVG" src="map.svg" type="image/svg+xml" />这样就能在浏览器中看到SVG的图。然而 ,要想在js中直接获取到SVG的对象:svgDoc = document.getElementById("mySVG").getSVGDocument();却会提示svgDoc为null。即使将该行代码放在ready函...

2018-02-09 15:34:11 926 1

原创 向指定窗口发送一个BN_CLICKED消息

向指定窗口发送一个BN_CLICKED消息设一个对话框上有一个按钮,现在鼠标正在按钮上方为了向该对话框发送消息来响应该按钮的BN_CLICKED消息(注意不可以向按钮发送,而是要向对话框发送,因为按钮是将消息发往对话框,由对话框来响应)。BOOL CYuCvImageControl::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt){ // ...

2018-02-09 15:34:08 1489

原创 SVG动态添加元素与事件

SVG文件是由各个元素组成。元素由标签定义,而标签格式即html的元素定义格式。但是载入一个SVG文件,却无法通过常规的js获取对象方式来获取到SVG中定义的元素,更无法通过这种方式来动态添加SVG元素与事件。SVG元素的操作都要借助于SVG的document对象。SVG的document对象获取方式为:svgDoc = document.getElementById("mySVG").getSV...

2018-02-09 15:34:05 10088

原创 MFC控件响应鼠标中键OnMouseWheel

控件必须获取焦点才能响应OnMouseWheel。因此首先要在控件的OnLButtonDown里调用SetFocus();。然后重载控件的OnMouseWheel函数:BOOL CYuCvImageControl::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt){ // TODO: Add your message handler code...

2018-02-09 15:34:03 7399

原创 MFC重载鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息

1. 重载OnMouseMove()消息,在消息的实现中添加代码:void CMainWindow::OnMouseMove(UINT nFlags, CPoint point){ TRACKMOUSEEVENT tme; tme.cbSize = sizeof(tme); //结构体缓冲区大小 tme.dwFlags = TME_HOVER; //注册WM_MOUSEHOVER消息 t...

2018-02-09 15:34:00 2764

原创 MFC改变鼠标指针的形状

只要重载当前窗口的OnSetCursor()函数即可。在OnSetCursor()函数中:添加代码:::SetCursor(AfxGetApp()->LoadCursor(cursorID));//读取并设置鼠标指针形状return TRUE;//return CBitmapButton::OnSetCursor(pWnd, nHitTest, message);//把这一行注释掉其中A...

2018-02-09 15:33:58 1369

原创 VC的路径

1.注意#include "../Common/MyTD.h" 这里面的目录表示方式与CFile saveFile;saveFile.Open(_T("\\abc.bmp"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);这两种路径表达方式是不一样的。2.    绝对路径:_T(“D:\\Project\\imageTe...

2018-02-09 15:33:55 441

原创 Glut键盘控制

在Glut中,键盘按键分两种:普通按键与特殊按键。其中:①  普通按键为:字母+数字,以及其他可以用ASCII表示的字母。注意ESC(对应ASCII码27)属于普通按键②  特殊按键为:↑↓←→,PageUp,PageDown,Home,End等普通按键所使用的按键响应函数为:void glutKeyboardFunc(void(*func)(unsigned char key, int x, i...

2018-02-09 15:32:30 1694

原创 OpenGL加速渲染:显示列表glGenLists

在OpenGL中,可能要用非常多的点、线、面来构成一幅图。若进行实时渲染,无疑对显示效率有非常大的影响。比如要画几百万个三角形,那么很可能旋转一下图片需要响应很久。为了加速渲染,可以将需要绘制的部分放在显示列表glGenLists中。每一个绘制的部分都是一个显示列表成员。然后将该列表进行预编译,编译完后并不显示。当需要显示的时候,直接调用显示列表,由于已经经过了预编译,所以此时会不经编译直接显示,...

2018-02-09 15:26:13 3944

原创 VC ini文件的默认路径

ini配置文件如果使用默认路径,则注意该默认路径是系统的路径。程序启动情况下,该路径是程序根目录。程序启动后若调用了文件选取操作,则会更改该默认路径。若依然按照原来的思路直接通过默认路径去选取文件,则可能会读取失败。...

2018-02-08 08:31:53 318

原创 VC ini配置文件常用操作

A.读写ini文件ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。写函数(一个):BOOL WritePrivateProfileS...

2018-02-08 08:31:49 608

原创 MFC HOOK的使用

首先要将钩子装入:HHOOK m_menuHook;m_menuHook = SetWindowsHookEx(WH_MSGFILTER, HookProc, NULL, GetCurrentThreadId());然后实现钩子函数:LRESULT CALLBACK HookProc(int code, WPARAM wParam, LPARAM lParam){ if (code == ...

2018-02-08 08:31:47 2036

原创 环境变量与DLL等文件引用

VS所使用的环境变量有两种:一种是系统环境变量,在我的电脑上单击右键选属性设置;另一种是VS环境变量,或者叫VS路径,需要在VS中选Tools->Options->Projectsand Solutions->VC++ Directorise来设置,(从VS2010开始该选项的位置已经更改到了Project->XX工程属性->Configuration Propert...

2018-02-08 08:31:45 4280 1

原创 MFC中DLL的创建

可创建的MFC DLL有三种:①  Regular DLLusing shared MFC DLL: MFC动态链接常规DLL。需要MFC动态链接库。该类型DLL既可以被MFC程序使用也可以被一般的Win32程序使用。②  Regular DLLwith MFC statically linked:MFC静态链接常规DLL。这种DLL将要使用的MFC的类代码直接加入到DLL中,从而使得DLL增大。...

2018-02-08 08:31:42 704

原创 接受拖放文件

需要重载类的WM_DROPFILE消息。接受拖放的文件并显示路径与文件名的示例:void CYuEdit::OnDropFiles(HDROP hDropInfo){ // TODO: Add your message handler code here and/or call default UINT nFilesDroppedCount = DragQueryFile(hDropInfo...

2018-02-08 08:31:39 234

原创 窗口的位置:GetWindowRect与MoveWindow等

父对话框的整个窗口区=父对话框客户区+父对话框标题栏区1. GetWindowRect()获取的是以屏幕左上角为(0,0)点的窗口区域,是屏幕坐标系。①  如果对父对话框调用GetWindowRect(),那么获取的矩形为父窗口在屏幕中的区域,其中矩形区含标题栏以及外边框。②  如果对控件调用GetWindowRect(),那么获取的矩形是控件在屏幕中的区域。注意在对话框的OnInitDialog...

2018-02-08 08:31:36 2954

原创 OnNotify与OnChildNotify以及CStatic的DrawItem实现源代码

OnNotify是用于子控件向父窗口发送消息用的。该消息的接收对象是父窗口。OnChildNotify是子控件向父窗口发送消息后,父窗口反射消息给子窗口用的。该消息的接收对象是子窗口。如:CDialog上有一个CStatic。在CStatic上点击鼠标,则CStatic会发送OnNotify消息给CDialog。CDialog接收OnNotify消息并处理。然后CDialog会发送OnChildN...

2018-02-08 08:31:34 1381

原创 MFC矩形、窗体与图像宽高:差1且不同

一.矩形         在MFC中,矩形的宽定义为:width= rect.right-rect.left         如矩形为:RECT rect;rect.left = 0;rect.top = 0;rect.right = 9;rect.bottom = 9;         则矩形:         宽     =       rect.right-rect.left   =...

2018-02-08 08:31:31 404

原创 GetDlgItem所获取CWnd*的时效性

         GetDlgItem所获取的窗口CWnd*并非一定是全局的。①  若控件绑定了变量,那么通过GetDlgItem所获取的CWnd*是全局的。对该CWnd*进行保存,随时都可以正确调用②  若控件没有绑定变量,仅仅只有一个ID,那么通过GetDlgItem所获取的CWnd*仅在当前函数体内有效。函数体结束时,该CWnd*会被释放。所以,如果对CWnd*进行了保存,当在其他函数内调用...

2018-02-08 08:31:29 632

jdk-8u251-macosx-x64.rar

jdk-8u251-macosx-x64的官方macosx 64位dmg。

2020-06-28

jdk-8u251-windows-x64.rar

jdk-8u251-windows-x64的官方windows 64位安装包。

2020-06-28

jdk-8u241-windows-x64.rar

jdk-8u241-windows-x64的官方安装包,官方下载需要注册且网速较慢。解压后得到jdk-8u241-windows-x64.exe,直接进行安装即可。

2020-03-17

ArcGIS API for JavaScript 3.25版本

ArcGIS API for JavaScript 3.25版本。用于ArcGIS API服务的发布。

2018-07-27

OpenCV图像在MFC中显示

该类可以在MFC中绑定一个static控件,从而将该控件作为OpenCV的IplImage图像显示控件。该类不仅可以以1:1、全窗口、半窗口、动态选择等方式显示IplImage图像,还可以对图像进行平移、放缩,并在信息区同步显示图像坐标系下鼠标所在位置及RGB或灰度值。除此之外还可以在控件上直接进行矩形的绘制操作,会实时显示绘制矩形的信息,并提供了一组接口函数用于获取或清除绘制的矩形。更多的函数功能请具体参考说明文档及源代码。 下载文件中附带源码、说明文档及实例。使用时务必详细阅读说明文档。

2014-01-26

MFC扩展位图按钮 实现不同状态切换 异形按钮 提示等

MFC的CBitmapButton的扩展类,实现了: 按钮正常、按下、弹起、禁用等不同状态图片切换; 鼠标经过按钮时按钮状态图片的改变; 鼠标指针在按钮上时形状的改变; 异形按钮,利用按钮自绘实现了特殊形状按钮; 按钮提示信息,鼠标停留在按钮上会显示提示

2012-10-31

MFC扩展位图按钮类

MFC的CBitmapButton的扩展类,实现了: 按钮正常、按下、弹起、禁用等不同状态图片切换; 鼠标经过按钮时按钮状态图片的改变; 鼠标指针在按钮上时形状的改变; 异形按钮,利用按钮自绘实现了特殊形状按钮; 按钮提示信息,鼠标停留在按钮上会显示提示

2012-10-30

MFC中使用flash按钮并交互

使用flash制作了按钮,然后导入到MFC中使用,并与MFC产生交互。点击界面上不同的flash按钮会弹出响应的提示。注意flash文件的制作要添加fscommand消息,并传出参数以供MFC调用。

2012-05-25

MFC选择位图文件并显示

在MFC中点击一个按钮,然后会弹出文件选择框,从文件选择框中选择一个bmp格式的位图文件并显示出来。

2012-04-19

空空如也

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

TA关注的人

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