Zum Inhalt springen

geloescht_Newlukai

Mitglieder
  • Gesamte Inhalte

    451
  • Benutzer seit

  • Letzter Besuch

Beiträge von geloescht_Newlukai

  1. Für alle Interessierten: Es ist tatsächlich so, daß der SPeicher nicht wieder freigegeben wird, weder automatisch noch durch eine evtl. manuelle Ansteuerung. Allerdings gilt das nur für die von Sun implementierte JVM. Bei anderen Implementierungen kann es durchaus anders sein.

  2. Ich verwende das JDK 5.

    Zu den Zeitabständen: Die paar Zeilen sind der komplette Code. Führe ich das Programm aus und sind die Integer generiert, lasse ich dem System 10 Sekunden Zeit, um sehen zu können, wie groß der Speicherverbrauch ist.

    Danach entferne ich mit dem Null-Setzen jegliche Referenz auf die Integer die ich habe. Zugegeben, die Referenz auf die Liste wird entfernt, die Integer sind noch über die Liste referenziert. Allerdings sollte die JVM bzw. der GC ja merken, daß somit auch die Referenzen auf die Integer unnötig sind. Jedenfalls hat das System danach 20 Sekunden Zeit, etwas zu tun. Meiner Meinung nach ist das mehr als genug Zeit.

    Und nach dem Erstellen bleiben die 33MB reserviert.

    Und anschließend starte ich den GC eben manuell mit nochmals 20 Sekunden Verschnaufpause. Sind die rum, wird das Programm beendet und der Prozess terminiert, ergo kein Speicherverbrauch mehr.

  3. Sicher?

    Ich konnte nicht umhin und habe es getestet. Dazu habe ich folgende Zeilen geschrieben:

    List<Integer> ints = new ArrayList<Integer>(10000);
    for(int i = 0; i < 1000000; i++) {
    ints.add(new Integer(i));
    }

    try {
    System.out.println("done ... waiting");
    Thread.sleep(10000);
    ints = null;
    System.out.println("set to null ... waiting 20s");
    Thread.sleep(20000);
    System.gc();
    System.out.println("started GC ... waiting 20s");
    Thread.sleep(20000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }[/PHP]

    Ich bin sicher ich habe einen Denkfehler oder so drin ;)

    Jedenfalls habe ich das Programm aus der eclipse gestartet und mit dem Task-Manager den Speicherverbrauch des neuen Prozesses überwacht. Nachdem die Integer erstellt wurden, bleiben - auch nach dem Null-Setzen - die ca. 33MB belegt.

  4. Mahlzeit,

    ich hätt' da mal ein Problem. Angenommen, ich erstelle einen großen Haufen an Objekten und Java bzw. die VM läßt sich vom System entsprechenden Speicher zuweisen. Soweit alles klar.

    Wenn ich nun aber keine Referenzen mehr auf die Objekte habe, löscht sie die Garbage Collection irgendwann. Auch klar.

    Nun mein Problem: Dieser freigewordene Speicher, bleibt der Java zugewiesen oder wird er dem System wieder zurückgegeben? Oder kann man das manuell bewerkstelligen?

    Gruß

    Newlukai

  5. Klasse, Instanz, Referenz, Attribut, Methode, Übergabeparameter, Rückgabeparameter

    Das sind keine Java-Fachbegriffe. Das sind alles Begriffe (bis auf vll. Referenz) der opbjekt-orientierten Programmierung. Ich gehe davon aus, daß Du irgendeinen Informatikkurs begonnen hast, der mit Java arbeitet und mit diesen Begriffen das erste Mal konforntiert wurdest. Für solch einen Fall empfehle ich Dir doch sehr Java ist auch eine Insel und für einen tieferen Einstieg in die OOP das Praxisbuch Objektorientierung.

  6. ich bin jetzt deinem Rat gefolgt mit dem StringBuffer

    
    StringBuffer sbText = new StringBuffer();                         
    
              sbText.append(sLine);
    
              System.out.println(sbText);
    
    

    jetzt fehlt mir nur noch das abspeichern der sLine und das zufügen der nächsten sLine. Da hab ich noch Probleme mit :( mich irritieren die (*) noch!

    Das sieht ja schon mal gut aus. Jetzt mußt Du nur noch jede sLine, die zwischen den p-Tags hängt per sbText.append(sLine) and den StringBuffer anhängen. Der StringBuffer darf dabei natürlich nur einmal und nicht jedesmal initialisiert werden ;)

    Du mußt also herausfinden, ob die aktuelle gelesene sLine zwischen p-Tags liegt oder nicht und je nachdem dem StringBuffer hinzufügen. Probier' mal rum, falls Du hängst, melde Dich wieder.

    Hab ich übrigens geändert. Keine Ahnung warum ich da nicht gleich 0 genommen habe. Keine Absicht von mir mit dem 0xffff

    Hab' auch mehr aus Neugierde gefragt, als Dich belehren zu wollen :D

  7. Kein Wunder, wenn man nichts dafür tut, daß wer Text gesichert/ausgegeben wird. Aber gut: Du bist Dir im Klaren darüber, daß Du einen Text über mehrere Zeilen liest und daher immer wieder 'ne neue sLine hast? Du mußt also den Text von "<p>" bis zum Ende der Zeile sichern, dann alle weitere Zeilen dranhängen bis Du eine Zeile findest, in der "</p>" steht. Empfehlen würde ich da einen StringBuffer. Über append() kannst Du an den immer wieder einen String anhängen, so daß Du später den kompletten Text innerhalb der p-Tags in diesem StringBuffer hast. Das reicht vorerst mal als Tip, schließlich macht Übung den Meister.

    Noch was: Warum setzt Du iFirst nicht einfach auf 0 statt auf 0xffff?

  8. indexOf ?

    indexOf(String str)

    Returns the index within this string of the first occurrence of the specified substring.

    Bringt relativ wenig mit einem Pattern. Du suchst wohl eher das aus der Klasse Matcher:

    int start() 
    
              Returns the start index of the previous match.

  9. (host=Server2)(por t=1531)

    Mir fällt erst mal nur auf, daß da ein Leerzeichen zuviel ist. Und dann weiß ich nciht, ob man die URL wirklich so schreiben kann. Hast Du Dich mit einem anderen Tool mit der Datenbank verbinden können?

    Normalerweise würde das ja so oder so. ä. aussehen:

    
    jdbc:oracle:thin:@Server1:1610:JAVA.TEST
    
    

    Versuch's erst mal mit DBVisualizer oder so.

  10. (Also DB werd ich schon hinbekommen) Frage ist mehr: Wie ich das Aufbauen soll?

    Wie kann man abfangen das Fenster geschlossen wird?

    Die DB bekommst Du also hin, das ist ja schon mal gut.

    Du fragst mich, wie Du das aufbauen sollst. Dazu muß ich erst mal wissen, was Du aufbauen willst und wo ich Dein Wissen erweitern kann.

    Das mit dem Fenster ist relativ easy: How to make Frames aus der JavaAPI.

  11. Um Dir helfen zu können, muß man erst mal wissen, wie weit Du bist. Hast Du das Datenbankschema schon entworfen? Hast Du schon etwas Code für den Client geschrieben?

    Zum automatischen Abmelden: Das Schließen eines Fensters kan abgefangen werden. In der aufgerufenen Methode kannst Du dann alle Schritte zum Abmelden unternehmen.

  12. Hier die Meinung der JavaAPI:

    Although JComboBox inherits methods to register listeners for low-level events — focus, key, and mouse events, for example — we recommend that you don't listen for low-level events on a combo box. Here's why: A combo box is a compound component — it is comprised of two or more other components. The combo box itself fires high-level events such as action events. Its subcomponents fire low-level events such as mouse, key, and focus events. The low-level events and the subcomponent that fires them are look-and-feel-dependent. To avoid writing look-and-feel-dependent code, you should listen only for high-level events on a compound component such as a combo box. For information about events, including a discussion about high- and low-level events, refer to Writing Event Listeners (in the Creating a GUI with JFC/Swing trail).

    Aber es ist wohl machbar mit einem PopupMenuListener. Einfach per addPopupMenuListener einbinden.

  13. Klar. Hier ist es unnötig, die Exception hochzuwerfen. Aber angenommen, man wollte das tun, kann ich zumindest Dein Argument mit den Parametern, die mitgegeben werden müssen, entkräften:

    public boolean open() throws Exception {
    //...
    if(anzZeilen < anzSollZeilen) {
    throw new Exception("Zu wenige Zeilen: " + anzZeilen + " statt " + anzSollZeilen);
    }
    }[/PHP]

    So bleiben die Parameter bei der auftretenden Stelle und es wird eine aussagekräftige Fehlermeldung erstellt, die ohne Probleme nach oben weitergereicht werden kann.

    Erweitern wir Dein Beispiel um etwas mehr Funktionalität. Der Benutzer kann über die Kommandozeile mehrere Dateien angeben:

    [PHP]class Main {
    public static void main(String[] args) {
    String[][] fehlerhafteDateien = new String[args.length][2];
    int i = 0;

    for(String datei : args) {
    Eingabe eingabe = new Eingabe(datei);
    try {
    eingabe.open();
    //tu was
    eingabe.close();
    catch (Exception e) {
    fehlerhafteDateien[i][0] = datei;
    fehlerhafteDateien[i++][1] = e.getMessage();
    }
    }

    //gib die fehlerhaften Dateien mit zugehörigen Meldungen aus
    }
    }

    class Eingabe {
    public boolean open() throws Exception {
    //...
    if(anzZeilen < anzSollZeilen) {
    throw new Exception("Zu wenige Zeilen: " + anzZeilen + " statt " + anzSollZeilen);
    }
    }
    }

    Das Hochwerfen ist immer dann sinnvoll, wenn das Objekt, in dem der Fehler provoziert wird, ein einfach gestricktes Objekt und das delegierende Objekt einen anderen Weg zum Ziel kennt. Und solch einfach gestrickten Objekte gibt es einige, wenn man Design Patterns und/oder Refactoring nutzt.

  14. der nick sagt alles ;)

    Jetzt mal immer langsam. Auch ein Smiley macht die Aussage nicht besser.

    Aber zurück zum Thema: Du bist also der Meinung, daß das Weiterreichen von Fehlern absolut unnötig und nie sinnvoll zu gebrauchen sei. Hier sind schon ein paar Gedanken dazu geäußert worden. Vielleicht ist es jetzt mal an der Zeit, daß Du Deine Aussage argumentierst? Verrate uns, warum es unsinnig sei, Exceptions an einer anderen Stelle zu behandeln.

    Ich bin anderen Meinungen immer aufgeschlossen und wer weiß, vielleicht kannst Du mich ja überzeugen?

    P.S.:aber wer sagt, das FIs programmieren können, bin gott sei dank keiner

    Ah ja. Was bist Du denn? Welch hohen akademischen Rang hast Du erlangt?

  15. Ich hätte da was. Stell' Dir ein Spiel vor mit Schnellspeichern. Du startest das Spiel und sagst "An letzter Stelle weitermachen".

    Intern versucht nun der "SaveManager" einen Speicherstand "SavePoint" zu initialisieren und übergibt ihm den Ort, wo die Datei liegt. Die Datei hast Du aber vorher aus Versehen gelöscht. Jetzt kommts im Objekt "SavePoint" zu einer FileNotFoundException. Statt jetzt den Fehler lokal zu behandeln und eine Meldung zu bringen "Letzten Speicherstand nicht gefunden" könnte man doch auch den Fehler in den "SaveManager" hoch reichen, der dann nachschaut, ob es noch weitere Spielstände gibt und den letzten laden.

    Zugegeben, daß Beispiel hört sich etwas herbeigezogen an, aber Situationen für sinnvolles Hochreichen von Exceptions gibt's sicherlich.


  16. public ResultSet querry(String statement)
    throws SQLException
    {
    Statement stmt;
    ResultSet result;
    try{
    stmt = conn.createStatement();
    result = stmt.executeQuery(statement);
    }
    catch (Exception e)
    {
    System.out.println("Fehler "+e);
    }
    return result;
    }
    [/PHP]

    Das kompilieren dieser Funktion führt zu folgendem Fehler:

    Du deklarierst eine Variable "result", der Du im try/catch-Block einen Wert zuweist. Tritt ein Fehler im try-Block auf, wird logischerweise der Variablen "result" kein Wert zugewiesen; sie bleibt uninitialisiert. Trotzdem gibst Du sie mit "return result" zurück. Und nicht initialisiert Variablen können weder zurückgegeben noch übergeben werden.

    [PHP]ResultSet result = new ResultSet();

    initialisiere bekomme ich

    Ich weiß nicht, ob Du den Unterschied zwischen Klasse und Interface kennst. Jedenfalls definiert ein Interface nur Methoden, ohne ihren Rumpf anzugeben. Und java.sql.ResultSet ist ein solches Interface. Aufgrund der Tatsache, daß ein Interface nur Methodensignaturen, aber keine Rümpfe enthält, kann man Interfaces nicht initialisieren.

  17. Hi,

    auf einer LAN-Party habe ich mir blöderweise eine Speicherzelle zerschossen. Einer der Lichtschalter war mit den Steckdosen gekoppelt und seither bricht Windows jedes Programm ab, daß versucht auf diese Zelle zuzugreifen.

    Den RAM-Riegel habe ich schon ausgetauscht und es ging auch eine Weile gut. Irgendwann fing aber auch der neue Riegel an zu spinnen, weshalb ich vermute, daß auch das MB in Mitleidenschaft gezogen wurde. Vielleicht ist es auch nur das MB das betroffen ist, wobei ich mir aber nicht erklären kann, weshalb dann nur eine Speicherzelle den Fehler verursacht.

    Jedenfalls dachte ich, es gäbe vielleicht ein Programm, mit dem ich diesen Bereich des RAMs für andere Anwendungen blockieren kann. Leider sind meine Google-Suchen nicht so erfolgreich, weshalb ich hier mal nachfragen wollte.

    Gruß

    Newlukai

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...