首页 > 后端开发 > 正文

写的程序怎么才能在系统通知区域运行(c++、go、java、python实现皆可)

2024-04-23 07:19:07 | 我爱编程网

今天我爱编程网小编整理了写的程序怎么才能在系统通知区域运行(c++、go、java、python实现皆可)相关信息,希望在这方面能够更好的大家。

本文目录一览:

写的程序怎么才能在系统通知区域运行(c++、go、java、python实现皆可)

写的程序怎么才能在系统通知区域运行(c++、go、java、python实现皆可)

需要用ShowWindow隐藏窗口和状态栏并用Shell_NotifyIcon发送NIM_ADD消息在托盘中显示一个图标。

示例:

#include 

int main()

{

HWND hwnd = GetConsoleWindow();

MessageBox(hwnd, TEXT("即将转入后台运行"), TEXT("提示"), MB_ICONINFORMATION);

//在托盘区域添加一个图标

NOTIFYICONDATA nid;

nid.cbSize = sizeof(NOTIFYICONDATA);

nid.hWnd = hwnd;

nid.uID = 1;

nid.uFlags = NIF_ICON | NIF_TIP;

nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wsprintf(nid.szTip, TEXT("托盘图标的提示文字"));

Shell_NotifyIcon(NIM_ADD, &nid);

//隐藏控制台窗口和任务栏图标

ShowWindow(hwnd, SW_HIDE);

//模拟任务执行

Sleep(3000);

MessageBox(NULL, TEXT("后台任务执行完毕!"), TEXT("提示"), MB_ICONINFORMATION);

//退出时需要删除托盘图标

Shell_NotifyIcon(NIM_DELETE, &nid);

return 0;

}

写的程序怎么才能在系统通知区域运行(c++、go、java、python实现皆可)

如何设置jvm伊甸区大小

一、设置方法区内存大小我爱编程网

1、方法区的大小不必是固定的,jvm可以根据应用的需要动态调整。

1.1、jdk7及以前:

1、通过-XX:PermSize来设置永久代初始分配空间。默认值是20.75M。

2、-XX:MaxPermsize来设定永久代最大可分配空间。32位机器默认是64M,64位机器模式是82M。

3、当JVM加载的类信息容量超过了这个值,会报异常outofMemoryError:PermGenspace

1.2、jdk8及以后

1、元数据区大小可以使用参数-XX:MetaspaceSize和-XX:MaxMetaspaceSize指定,替代上述原有的两个参数。

2、默认值依赖于平台。windows下,-XX:MetaspaceSize是21M,-XX:MaxMetaspaceSize 的值是-1,即没有限制。

3、与永久代不同,如果不指定大小,默认情况下,虚拟机会耗尽所有的可用系统内存。如果元数据区发生溢出,虚拟机一样会抛出异常outofMemoryError: Metaspace

4、-XX:MetaspaceSize:设置初始的元空间大小。对于一个64位的服务器端JVM来说,其默认的-XX:MetaspaceSize值为21MB。这就是初始的高水位线一旦触及这个水位线,Full GC将会被触发并卸载没用的类(即这些类对应的类加载器不再存活),然后这个高水位线将会重置。新的高水位线的值取决于GC后释放了多少元空间。如果释放的空间不足,那么在不超过MaxMetaspaceSize时,适当提高该值。如果释放空间过多,则适当降低该值。

5、如果初始化的高水位线设置过低,上述高水位线调整情况会发生很多次。通过垃圾回收器的日志可以观察到Full GC多次调用。为了

写的程序怎么才能在系统通知区域运行(c++、go、java、python实现皆可)

重新理解jvm运行时的内存分布(堆栈方法区交互)

栈堆方法区的交互关系

java栈存储的本地变量表,包括八种数据类型和引用类型,引用类型指向对象的地址,保存在reference,指向java堆,对象类型数据会保存变量名,变量类型,变量值等,这些会存在方法区中去查看(在初始化的时候)。

在java栈中会存放对象实例(s1),但是他对象实例中具体的数据会由java栈中的引用指向java堆中的地址,里面的对象实例数据存放(实例名,实例相关类型,元数据信息。。。。),而静态变量,常量,类加载后的信息等会存放在方法区,在运行时需要调用的时候去方法区取,所以方法区和java堆都是共享的。而java栈时线程独有的数据(包括程序计数器,本地方法栈)。

一个jvm实例,只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件之后,需要把类,方法,常量放到堆内存中,保存所有的引用类型的真实信息,以方便执行器执行。堆内存分为三部分。

(养老区就是老年代)

堆内存 逻辑上 分为三部:新生 +养老 +方法区

eden+survivor+Spaces(元空间或者叫方法区或者Perm)

Perm 永久存储区,是一个常驻内存的区域,用于存放jdk自身携带的Class,Interface的元数据,被装载进此区域的数据是不会被垃圾回收器回收的,只有关闭jvm后才会释放此区域所占用的内存。

如果出现OutOfMemoryReeor: PermGen space 说明java虚拟机堆永久带Perm内存设置不够,一半出现这种情况,都是程序启动加载大量第三方jar呆滞的,

对于HotSpot虚拟机很多开发者习惯将方法区称之为永久代(Parmenent

Gen),永久代是方法区的一个实现,这是不对的,方法区是逻辑上的部分。在jdk7中已经将原本放在永久代的字符串常量池移走了。

常量池( Constant Pool Constant PoolConstant Pool Constant Pool Constant Pool )是方法区的一部分, Class Class文件除了有类的版本、 字段方法、接口等描述信息外,还有一项就是常量池这部分内容将在类加载后进入。

伊甸园区,所有对象刚new出来都会放在这里。

对象分两种:

1.如果是大对象直接分配在Old区。

2.如果禁言了逃逸分析,会在栈上分配。

以上两种都不符合,放入伊甸园区。(Eden区)

看java7中如图:

对比java8

以上就是我爱编程网小编给大家带来的写的程序怎么才能在系统通知区域运行(c++、go、java、python实现皆可)全部内容,希望对大家有所帮助!
与“写的程序怎么才能在系统通知区域运行(c++、go、java、python实现皆可)”相关推荐