Wie finden Sie heraus, ob der Stack einer Maschine im Speicher hoch oder runter wächst? (JAVA)

8

Ich habe ein C-Programm, um zu überprüfen, ob der Maschinenstapel im Speicher nach oben oder unten wächst.

Es geht so:

%Vor%

Nun möchte ich das gleiche in Java machen. : -)

Kennt jemand eine Lösung, ohne irgendeinen nativen Code zu schreiben ???

Danke

    
Roman 22.07.2009, 08:58
quelle

4 Antworten

14

Wenn Sie keinen systemeigenen Code verwenden, kann ich mir keine Situation vorstellen, in der es möglicherweise in reinem Java-Code eine Rolle spielen könnte. Schließlich könnte der Java-Stack in irgendeiner Richtung zugewiesen sein, anstatt ein zusammenhängender Speicherblock zu sein (wie der Maschinenstapel).

    
Greg Hewgill 22.07.2009, 09:01
quelle
6

Java-Quellcode kompiliert zu Java-Byte-Code, der eine Assembler-ähnliche Sprache ist, die auf der JVM ausgeführt wird. JVM ist eine virtuelle Maschine und sieht daher genau so aus wie definitionsgemäß auf Maschinen, die Stack-Up und Stack-Down verwenden.

Aus diesem Grund ist es nicht möglich zu wissen, ob auf einem bestimmten Maschinenstapel der Java-Code nach oben oder unten wächst.

    
Gregory Mostizky 22.07.2009 09:38
quelle
6

Dies ist in Java-Code nicht möglich. Es kann auch nicht in C-Code getan werden. Der von Ihnen gepostete Code ruft undefiniertes Verhalten (&b > a) auf. Gemäß dem Standard ist das Ergebnis des Vergleichs zweier Zeiger nicht definiert, es sei denn, die Zeiger zeigen auf Elemente innerhalb desselben Arrays. Der Standard sagt nichts über die Richtung des Stack-Wachstums aus oder ob ein Stack überhaupt existiert.

    
sigjuice 22.07.2009 15:05
quelle
2

woah, du wirst keine brauchbaren Informationen aus so einfachem Code in Java bekommen können, zumindest nicht, dass ich davon weiß.

Der Code, den Sie haben, macht viele Annahmen, die sogar in C tatsächlich wahr sein können oder auch nicht. Dies hängt von der Plattform und dem Betriebssystem ab, auf dem das Programm ausgeführt wird.

In Java werden Sie vollständig von der Implementierung der JVM zur Adressierung abhängig sein und als solche nicht in der Lage sein, dies zu tun.

Meine erste Antwort wäre, einen Profiler zu verwenden. Sie können Ihren eigenen Profilerstellungs-Agent auch mithilfe der bereitgestellten API (JVMTI) erstellen zu diesem Zweck. Es ist sicherlich viel komplexer als Ihr Ansatz, aber Sie sollten in der Lage sein zu bekommen, was Sie brauchen.

Es gibt auch diese Seite bei IBM, die hilfreich sein können.

Das ist so ziemlich alles, was ich zu dem Thema habe, ich hoffe es wird dir helfen

    
Newtopian 22.07.2009 09:25
quelle

Tags und Links