在Linux上,我可以使用netstat -pntl | grep $PORT或fuser -n tcp $PORT找出哪个进程(PID)正在侦听指定的TCP端口.如何在Mac OS X上获得相同的信息?
我问这个问题是为了了解如何在JVM中增加运行时调用堆栈的大小.我已经得到了答案,我还得到了许多有用的答案和评论,这些答案和评论与Java如何处理需要大型运行时堆栈的情况有关.我已经用答案摘要扩展了我的问题.
最初我想增加JVM堆栈大小,所以程序就像没有运行的程序一样StackOverflowError.
public class TT {
public static long fact(int n) {
return n < 2 ? 1 : n * fact(n - 1);
}
public static void main(String[] args) {
System.out.println(fact(1 << 15));
}
}
Run Code Online (Sandbox Code Playgroud)
相应的配置设置是java -Xss...具有足够大值的命令行标志.对于TT上面的程序,它与OpenJDK的JVM一样:
$ javac TT.java
$ java -Xss4m TT
Run Code Online (Sandbox Code Playgroud)
其中一个答案还指出,这些-X...标志是依赖于实现的.我在用
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.1) (6b18-1.8.1-0ubuntu1~8.04.3)
OpenJDK 64-Bit Server VM (build 16.0-b13, mixed mode)
Run Code Online (Sandbox Code Playgroud)
也可以仅为一个线程指定一个大堆栈(参见其中一个答案如何).建议使用此方法java -Xss...以避免为不需要它的线程浪费内存.
我很好奇上面的程序需要多大的堆栈,所以我运行它n增加了:
fact(1 …在Java中获取字符串的最后一个字的最简单方法是什么?你可以假设没有标点符号(只是字母字符和空格).
我需要一个快速,可靠且内存有效的Linux键值数据库.我的密钥大约是128个字节,最大值大小可以是128K或256K.数据库子系统不应使用超过大约1 MB的RAM.总数据库大小为20G(!),但一次只访问一小部分数据.如果有必要,我可以将一些数据blob从数据库中移出(到常规文件),因此大小最多可降至2 GB.数据库必须在系统崩溃后继续存在,而不会丢失最近未修改的数据.我的读取次数比写入次数多100倍.如果它可以使用块设备(没有文件系统)作为存储,那么这是一个加分.我不需要客户端 - 服务器功能,只需要一个库.我需要Python绑定(但如果它们不可用,我可以实现它们).
我应该考虑哪些解决方案,您建议使用哪种解决方案?
我知道哪些候选人可以工作:
bsddbPython模块提供绑定)mmap()是整个文件,repack操作有时会使文件大小翻倍,如果数据库大于2G(即使在64位系统上)也会产生神秘的故障,集群实现(CTDB也可用;文件经过大量修改后变得太大;文件在大量哈希争用后变得太慢;没有内置方法来重建文件;通过锁定单个哈希桶来实现非常快速的并行更新)我不会用这些:
auto_vacuum;注意:小写入事务可能非常慢;注意:如果繁忙的过程是做很多交易,其他流程都饿了,他们永远无法获得锁定)仅供参考,最近一篇关于 Linux杂志中关键值数据库的文章.
仅供参考,一个较旧的软件列表
考虑下面的代码
class A
{
int x = 5;
void foo()
{
System.out.println(this.x);
}
}
class B extends A
{
int x = 6;
// some extra stuff
}
class C
{
public static void main(String args[])
{
B b = new B();
System.out.println(b.x);
System.out.println(((A)b).x);
b.foo();
}
}
Run Code Online (Sandbox Code Playgroud)
该计划的输出是
6
5
5
Run Code Online (Sandbox Code Playgroud)
我理解前两个但是无法理解最后一个.b.foo()如何打印5.B类将继承foo方法.但它不应该打印bx会打印什么?到底发生了什么?
我在Linux中有一个程序,如果它的stdin/stdout不是TTY(终端设备),它就拒绝运行.是否有一个易于使用的工具,它将创建一个PTY,使用新创建的TTY启动程序,并通过stdin/stdout复制所有数据?
用例不是交互式的,而是脚本的.我正在寻找最轻量级的解决方案,最好不要创建TCP连接,也不需要安装太多其他工具和库.
我想将gcc安装到Mac OS X Leopard,并使用MacPorts从源代码编译一些软件.正如http://www.macports.org/install.php建议的那样,我已经注册为Apple开发人员.现在我必须下载Xcode开发人员工具,但它似乎是巨大的.对于gcc和一些头文件(主要用于控制台应用程序),是否真的需要这么大的下载(3.5GB或1GB)?是否有较小的下载(可能在其他网站上)可行?我是否按照MacPorts网站的要求找到了正确的下载(Xcode Developer Tools)?
我不需要IDE,我不需要任何与iOS相关的软件,我不需要大的SDK,我不想做任何GUI编程.
我没有安装盘.
有一个类似的问题有没有办法在OSX中安装gcc而不安装Xcode?.我的问题是不同的,因为我不介意下载和正在使用Xcode的部分来获取gcc,只要它相当大,比如300 MB未压缩.那可能吗?
在http://developer.apple.com/devcenter/mac/index.action我找到了下载链接http://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.2__final/ xcode_3.2.5_and_ios_sdk_4.2_final.dmg,这是一个3.5GB的下载.根据下面的一些答案,我注意到Xcode 3.2.5适用于Snow Leopard,我需要Leopard的Xcode 3.1.4(1GB),我可以从http://connect.apple.com/获取(标题为Downloads和ADC Program Assets)注册并登录后,单击Downloads/Developer Tools部分,然后找到Xcode 3.1.4 Developer Tools.下载链接是http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/download?path=%2FDeveloper_Tools%2Fxcode_3.1.4_developer_tools%2Fxcode314_2809_developerdvd.dmg.
让我们假设foo/bar.txt在运行时遇到合并冲突:
$ git checkout A
$ git merge B
Run Code Online (Sandbox Code Playgroud)
我想foo/bar.txt从分支A中自动解决冲突.(我知道我在做什么,我确实需要这个.分支B中的版本是错误的,我不关心失去工作中的变化在这种情况下树.)似乎我可以通过运行这些命令来做到这一点:
$ git reset foo/bar.txt
$ git checkout foo/bar.txt
Run Code Online (Sandbox Code Playgroud)
是否有更简单的单命令解决方案?
不幸的是,foo/bar.txt即使没有冲突,这些命令也会改变,我不希望这样.如果没有冲突,我希望保持foo/bar.txt在任何状态下git merge B都离开它.
所以我需要一个Unix shell命令,它会检测是否存在冲突foo/bar.txt,如果有,它将通过foo/bar.txt从当前分支获取版本来解决冲突.它不会做任何其他事情,即它不会修改其他文件,它不会提交更改,并且foo/bar.txt如果该文件中没有冲突则不会更改.
我最近越来越多地使用C++.我用C做了一些(非常小的)套接字编程,但是对使用C++做一些工作很感兴趣.我只能在基于C的套接字实现上找到参考/教程.是否有一个原因?我知道,或者相信我知道你可以使用C套接字库来实现C++,但我不确定.
是否有比其他人更频繁使用的C++套接字库?这不是一个主观问题,我实际上是在寻找Socket API /库对C++的作用.
我在套接字编程和C++方面相当新,所以请不要回答任何问题.
谢谢
我有一个构建配置,有一些"-Wno"选项,涵盖'gcc'和'clang'.问题是gcc不识别某些特定的clang并且因为它而无法编译.
错误示例:
error: unrecognized command line option "-Wno-self-assign"
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉gcc忽略它无法识别的命令行选项?